对于ASP.NET MVC中页面强类型的个人理解

 

进入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的更多相关文章

  1. MVC 强类型ViewData[] TempData[]

    一.ViewData[] //赋值 ViewData["u"]="值"; //取值 数据类型 u= ViewData["u"] as 数据类 ...

  2. <记录> HtmlHelper和 强类型页面

    HtmlHelper  路径生成 <!--普通写法--> <a href="/home/index">超链接</a> <!--利用Url类 ...

  3. ASP.NET MVC总结

    一.概述 1.单元测试的NUnit, MBUnit, MSTest, XUnit以及其他的框架 2.ASP.NET MVC 应用的默认目录结构有三个顶层目录: Controllers.Models.V ...

  4. MVC 强类型传值Model。和弱类型传值ViewData[&quot;&quot;]。及用EF进行增删查改(母版页的使用)

    <1> 控制器 </pre><pre name="code" class="csharp">using MvcTest.Mo ...

  5. MVC强类型视图、强类型HTML辅助方法

    强类型视图: <table> <tr> <td>ID:</td><td><%: Model.Id %></td> & ...

  6. HtmlHelper和强类型转换

    MVC HtmlHelper;1.Url():<%= Html.ActionLink("用户列表","方法","控制器") %> ...

  7. MVC强类型和弱类型的区别

    1 强类型的处理 首先必须要有一个对象的实体类,UserINfo就是一个实体类,如下: public class UserInfo() { public  int Id{set;get;} publi ...

  8. MVC ViewData和ViewBag[转]

    转自:http://blog.csdn.net/a497785609/article/details/7854402#t0       视图数据可以通过ViewBag属性访问,它主要是为了从Contr ...

  9. ASP.NET MVC程序传值方式:ViewData,ViewBag,TempData和Session

    转载原地址 http://www.cnblogs.com/sunshineground/p/4350216.html 在ASP.NET MVC中,页面间Controller与View之间主要有以下几种 ...

随机推荐

  1. Galactic Collegiate Programming Contest Gym - 101572G 模拟

    #include<bits/stdc++.h> using namespace std; int n,m; struct node { int id; int slove; int pen ...

  2. nCompass-解决方案介绍

    nCompass-解决方案介绍 1.  IT运维的现状及痛点 业务部门投诉系统不可用,各个部门盘查: 网络是通的:系统资源正常:应用进程状态都是正常的:数据库日志中也没有报错 运维被动: 80%的故障 ...

  3. C语言实现读取字符转换为浮点数,不使用scanf函数

    c语言读取int或者float数据,我们习惯于使用scanf函数,但是如果不使用scanf函数,该怎么实现呢. 这里就来尝试一下,不使用scanf来读取数据并转换为float类型. 下面的getflo ...

  4. MySQL第七课

    统计记录条数 SELECT COUNT(*)  FROM 表名; SUM():总和 AVG():平均值 MAX():最大值 MIN():最小值 排序: SELECT 字段名  FROM 表名 ORDE ...

  5. netty 的事件驱动

    netty 是事件驱动的,这里面有两个含义,一是 netty 接收到 socket 数据后,会产生事件,事件在 pipeline 上传播,二是事件由特定的线程池处理. NioEventLoop 轮询网 ...

  6. 使用IDA pro逆向ARM M系核心的Bin固件

    使用IDA pro逆向ARM M系核心的Bin固件 ​ 物联网和智能设备这两年还是比较火的,我们的手中或多或少都有了几个智能设备,比如手环,智能手表,或者门锁什么之类的东西,但是同学们在做逆向的时候, ...

  7. Apache Flink 任意 Jar 包上传致 RCE 漏洞复现

    0x00 简介 Flink核心是一个流式的数据流执行引擎,其针对数据流的分布式计算提供了数据分布.数据通信以及容错机制等功能.基于流执行引擎,Flink提供了诸多更高抽象层的API以便用户编写分布式任 ...

  8. MySQL 8 服务器日志

    错误日志: 启动.运行.停止 mysqld(MySQL Server) 遇到的问题 通用查询日志: 建立客户端连接和从客户端接收的语句 二进制日志: 更改数据的语句(也用于复制) 中继日志: 从复制m ...

  9. python3-cookbook笔记:第二章 字符串和文本

    python3-cookbook中每个小节以问题.解决方案和讨论三个部分探讨了Python3在某类问题中的最优解决方式,或者说是探讨Python3本身的数据结构.函数.类等特性在某类问题上如何更好地使 ...

  10. Vue(三)--循环语句

    v-for: v-for 指令需要以 site in sites 形式的特殊语法, sites 是源数据数组并且 site 是数组元素迭代的别名. demo1. <!DOCTYPE html&g ...