关于强类型、ViewData
进入ASP.NET MVC学习 发现很多和winfrom不同的东西,但是利用的C#语言还是没有变化,更多的是利用了新的语言,html jquery ajax.....唉 心累,一本书一本书看的去 看完了 回想起来的时候是很快乐的,在此说一说学习之中遇到的比较深的坎:
在对于页面强类型学习的时候,刚开始感觉还是很轻松的,不就是直接在Controller中用一次viewdata["***"]=value并且在View中通过@model **** 就可以了嘛,又或是直接利用ViewData.Model做更简单的事,还有viewbag,tempdata等就不说了,
但是呢,自从遇到一次坎后才知道,并不是那么简单,比如说viewdata使用的基本原理是利用键值对形式,但是呢这个object对应的保存的数据到底是什么类型的呢,是用object抽象形式保存还是用原生的形式呢,比如说我有一个ProductCategory的类,并且进行var pro = new ProductCategory(***)创建一些信息,在通过ViewData["objPC"]=pro;那么这个pro保存在objPC保存的形式类型是哪种呢?object or ProductCategory?
如果是说保存为object那么在view里写入@model ProductCategory 也就说的通顺了,再次进行强制转换嘛。实际上呢,不引用这那句话,在view里直接写Model并且通过点的形式调用其成员,也是行得通的,只不过Model去调用的话必须要保证那个属性或是方法一定存在那个值的类型之中,也就证明了一点,value的值传给viewdata保存时并不是用object形式进行保存的,而是用它的原生形式,
@model ProductCategory的引入只是为了在View中强制这个传入的值的类型,并且为了在编写代码的时候出现的错误少点,而@using ***更是和C#中的使用是一样的,毕竟@下就是c#代码了。
最后在说下在linq查询的条件下,通过controller传递过来的并不是确定的类型,什么意思呢,传过来的其实还是查询语句,并且此时查看Model的值时,也是显示一个查询语句,这归因于是使用延时加载的原因,当真正需要的时候再去查询,并且查询出来的类型大多数是利用的IQueryable<>类型,因此在View中提前指定好强类型页面也是可以的,毕竟知道了这个传过来的集合的类型是已经确定的,怎么不利用它里面的属性做更多的事情呢。
关于强类型、ViewData的更多相关文章
- MVC 强类型ViewData[] TempData[]
一.ViewData[] //赋值 ViewData["u"]="值"; //取值 数据类型 u= ViewData["u"] as 数据类 ...
- <记录> HtmlHelper和 强类型页面
HtmlHelper 路径生成 <!--普通写法--> <a href="/home/index">超链接</a> <!--利用Url类 ...
- ASP.NET MVC总结
一.概述 1.单元测试的NUnit, MBUnit, MSTest, XUnit以及其他的框架 2.ASP.NET MVC 应用的默认目录结构有三个顶层目录: Controllers.Models.V ...
- MVC 强类型传值Model。和弱类型传值ViewData[""]。及用EF进行增删查改(母版页的使用)
<1> 控制器 </pre><pre name="code" class="csharp">using MvcTest.Mo ...
- MVC强类型视图、强类型HTML辅助方法
强类型视图: <table> <tr> <td>ID:</td><td><%: Model.Id %></td> & ...
- HtmlHelper和强类型转换
MVC HtmlHelper;1.Url():<%= Html.ActionLink("用户列表","方法","控制器") %> ...
- MVC强类型和弱类型的区别
1 强类型的处理 首先必须要有一个对象的实体类,UserINfo就是一个实体类,如下: public class UserInfo() { public int Id{set;get;} publi ...
- MVC ViewData和ViewBag[转]
转自:http://blog.csdn.net/a497785609/article/details/7854402#t0 视图数据可以通过ViewBag属性访问,它主要是为了从Contr ...
- ASP.NET MVC程序传值方式:ViewData,ViewBag,TempData和Session
转载原地址 http://www.cnblogs.com/sunshineground/p/4350216.html 在ASP.NET MVC中,页面间Controller与View之间主要有以下几种 ...
随机推荐
- 声明式服务调用:Spring Cloud Feign
最近在学习Spring Cloud的知识,现将声明式服务调用:Spring Cloud Feign 的相关知识笔记整理如下.[采用 oneNote格式排版]
- NIO学习笔记,从Linux IO演化模型到Netty—— Netty零拷贝
Netty的中零拷贝与上述零拷贝是不一样的,它并不是系统层面上的零拷贝,只是相对于ByteBuf而言的,更多的是偏向于数据操作优化这样的概念. Netty中的零拷贝: 1.CompositeByteB ...
- css基础-float浮动
float实现文字环绕图片效果: <!DOCTYPE html> <html lang="en"> <head> <meta charse ...
- gdck01
有好几年 好几年 好几年 我成天在抱怨 我没钱 我没钱 恨老天不开眼 不开眼 不开眼 为什么好的事 都跟我没有缘
- jquery click事件中的return false
提交表单数据时设定了type="submit"属性,单击提交按钮后会默认刷新页面 但是在使用jquery的click事件时没出现跳转 $('button').click(funct ...
- win10c盘被下满文件解决办法
今天更新系统,发现一个巨坑,好不容易软件配置的环境,开始以为是病毒,重装后在弄发现还是这个问题.经过两天的亲测解决办法: win7 svchost.exe占用内存和CPU很高,电脑很卡的解决方法:ht ...
- P4883 mzf的考验[平衡树]
P4883 mzf的考验 维护一种数据结构 支持区间翻转 区间异或 区间求和- 显然 fhq treap 区间异或显然是拆位 ~~然后复杂度*20~~ 第一次先遍历一下整棵树 pushup 一下 就可 ...
- python高级应用
一:错误和异常 1.python错误和异常 语法错误:Python的语法错误或者解析错. 异常:运行时检测到的错误被称为异常. 2.异常处理 Python中使用try except 语句来捕获并处理异 ...
- Firefox下载.net服务器文件时中文乱码
ASP.NET中产生一个Excel报表,供浏览器下载.显然,下载时经常有汉字报表名称.针对当前的两个主流的浏览器IE和Firefox,似乎没有兼容的解决办法.网上搜索了一些解决方法,但在Firefox ...
- Docker常用命令和功能介绍
可以搜索 dockerfile 定制创建一个redis镜像image 表示镜像docker search 搜索镜像的名称和标签docker 所在目录/var/lib/dockerdocker的镜像文件 ...