进入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中提前指定好强类型页面也是可以的,毕竟知道了这个传过来的集合的类型是已经确定的,怎么不利用它里面的属性做更多的事情呢。