View & ViewData
ViewData 似乎没啥好说的,一个向 View 传送数据的字典。
--------------------------------------------------------------------------------
public class ViewDataDictionary : IDictionary<string, object>
{
private readonly Dictionary<string, object> _innerDictionary =
new Dictionary<string, object>(StringComparer.OrdinalIgnoreCase);
}
------------------------------------------------------------------
嗯,内部存储字典的 Key 不区分大小写。
ViewDataDictionary 内部唯一有些特殊的就是 Eval 方法,它让视图开发人员用很简便的方式显示数据,省了类型转换等麻烦。
-------------------------------------------------------------------------------------
public ActionResult Index()
{
ViewData["user"] = new User { Name = "Tom", Age = };
return View();
}
Index.aspx
<%= (ViewData["user"] as User).Name %>
<br />
<%= ViewData.Eval("user.Name") %>
------------------------------------------------------------------
对比之下,Eval() 就简单明多了。当你习惯使用匿名类型时,就知道 Eval() 的好处了。
------------------------------------------------------------------------------------
public ActionResult Index()
{
ViewData["user"] = new { Name = "Tom", Age = };
return View();
}
Index.aspx
<%= ViewData.Eval("user.Name") %>
----------------------------------------------------
Eval() 还能处理更深度的访问。
--------------------------------------------------------------------------
public ActionResult Index()
{
ViewData["user"] = new
{
Name = "Tom",
Age = ,
Data = new { X = , Y = }
};
return View();
}
Index.aspx
<%= ViewData.Eval("user.Data.y") %>
-----------------------------------------------------------
ViewData Key 还允许出现 "." 符号,试试看。
----------------------------------------------------------------------------
public ActionResult Index()
{
ViewData["user.xxx"] = new
{
Name = "Tom",
Age = ,
Data = new { X = , Y = }
};
return View();
}
Index.aspx
<%= ViewData.Eval("user.xxx.Data.y") %>
----------------------------------------------------------
Eval() 会按照如下方式尝试读取 ViewData 数据。
--------------------------------------------------------------------------------
ViewData["user.xxx.Data.y"]
ViewData["fuser.xxx.Data"]["y"]
ViewData["fuser.xxx"]["Data.y]
ViewData["user.xxx"]["Data"]["y"]
ViewData["user"]["xxx.Data.y"]
ViewData["user"]["xxx.Data"]["y"]
ViewData["user"]["xxx"]["Data.y"]
ViewData["user"]["xxx"]["Data"]["y"]
----------------------------------------------------------------
这个看着有点别扭,还是少写这样的代码为好。只所以这么写伪码,是因为 Eval() 支持从 Dictionary 中读取数据。
--------------------------------------------------------------------------------
public ActionResult Index()
{
ViewData["user"] = new
{
Name = "Tom",
Age = ,
Data = new Dictionary<string, int> { { "x", }, { "y", } }
};
return View();
}
Index.aspx
<%= ViewData.Eval("user.Data.y") %>
----------------------------------------------------------
View & ViewData的更多相关文章
- ASP.NET Core 中文文档 第二章 指南(4.3)添加 View
原文:Adding a view 作者:Rick Anderson 翻译:魏美娟(初见) 校对:赵亮(悲梦).高嵩(Jack).娄宇(Lyrics).许登洋(Seay).姚阿勇(Dr.Yao) 本节将 ...
- 在Asp.net MVC 3 web应用程序中,我们会用到ViewData与ViewBag,对比一下:
Asp.net MVC中的ViewData与ViewBag ViewData ViewBag 它是Key/Value字典集合 它是dynamic类型对像 从Asp.net MVC 1 就有了 ASP. ...
- 创建ASP.NET Core MVC应用程序(1)-添加Controller和View
创建ASP.NET Core MVC应用程序(1)-添加Controller和View 参考文档:Getting started with ASP.NET Core MVC and Visual St ...
- 白话学习MVC(十)View的呈现二
本节将接着<白话学习MVC(九)View的呈现一>来继续对ViewResult的详细执行过程进行分析! 9.ViewResult ViewResult将视图页的内容响应给客户端! 由于Vi ...
- 白话学习MVC(九)View的呈现一
一.概述 本节来看一下ASP.NET MVC[View的呈现]的内容,View的呈现是在Action执行之后进行,Action的执行生成一个ActionResult,[View的呈现]的功能就是:通过 ...
- 《ASP.NET MVC4 WEB编程》学习笔记------.net mvc实现原理ActionResult/View
ActionResult ActionResult是Action的返回结果.ActionResult 有多个派生类,每个子类功能均不同,并不是所有的子类都需要返回视图View,有些直接返回流,有些返回 ...
- ASP.NET MVC 中的ViewData与ViewBag
在Asp.net MVC 3 web应用程序中,我们会用到ViewData与ViewBag,对比一下: ViewData ViewBag 它是Key/Value字典集合 它是dynamic类型对像 从 ...
- Part 3 ViewData and ViewBag in mvc
ViewBag and ViewData is a mechanism(机制) to pass data from controller to view. We use '@' symbol(符号) ...
- Asp.net MVC中的ViewData与ViewBag
Asp.net MVC中的ViewData与ViewBag 在Asp.net MVC 3 web应用程序中,我们会用到ViewData与ViewBag,对比一下: ViewData ViewBag 它 ...
随机推荐
- Eclipse+Maven创webapp工程
1.开启eclipse,右键new-->other,例如以下图找到maven project. 选择maven project,点击next 2.选择maven project后.显示创建mav ...
- 经验36--C#无名(大事,物...)
有时候,方便代码,它会使用匿名的东西. 1.匿名事件 args.CookieGot += (s, e) => { this ...
- ipad pro注定是失败的!
ipad pro注定是失败的! 把一个玩具操作系统装在生产力工具上就能产生生产力了? so young so simple!
- UVA11992 - Fast Matrix Operations(段树部分的变化)
UVA11992 - Fast Matrix Operations(线段树区间改动) 题目链接 题目大意:给你个r*c的矩阵,初始化为0. 然后给你三种操作: 1 x1, y1, x2, y2, v ...
- B/S 类项目改善
B/S 类项目改善的一些建议 要分享的议题 性能提升:在访问量逐渐增大的同时,如何增大单台服务器的 PV2 上限,增加 TPS3 ? RESTful:相较于传统的 SOAP1,RESTful 风格 ...
- eclipse 配置android sdk和maven
首先下载 ADT-22.2.0.rar eclipse-jee-kepler-R-win32-x86_64.zip android SDK4.2.zip 分别解压在一个盘 将ADT里面的两个目录内容相 ...
- 承诺c指针 (1)指针是地址
(1)是地址 首先明白一个观点:指针就是地址.这是理解指针的起始一步. 直观感受下.变量的地址 int main() { int foo; int *foo_p; foo = 5; foo_p = & ...
- 也许游戏 它P/N图分析
关于游戏的问题,更多的时候是使用P/N图分析 p n p n p n p n n n n n n n n n p n p n p n p n n n n n ...
- Moq 和RhinoMocks
Moq & RhinoMocks 使用Mock对象进行测试一般都会有以下三个关键步骤: 使用接口来描述需要测试的对象 为实际的产品代码实现这个接口 以测试为目的,在Mock对象中实现这个接口 ...
- Hash散列算法 Time33算法
hash在开发由频繁使用.今天time33也许最流行的哈希算法. 算法: 对字符串的每一个字符,迭代的乘以33 原型: hash(i) = hash(i-1)*33 + str[i] ; 在使用时.存 ...