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 它 ...
随机推荐
- 我的第一次windows规划
#include <windows.h> LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM) ; //WinMain功能被分配一 ...
- 跳跃Java一些周期,双跳FOR周期
今天写的代码写在一个双层for周期,目前仍在使用Iterator,大致意思是假定在第二个周期在排位赛中给了整个双回路跳. 刚開始,直接使用break.巴拉巴拉的敲了一堆代码,信心满满的就直接执行.等到 ...
- fastboot完成自己主动命令
于Ubuntu13.10后来Ubuntu 14.04上,由APT安装fastboot以及adb该工具后, 发现fastboot在主动补充一个问题,, fastboot flash 自己主动有问题完成后 ...
- Android日志收集功能设计和实施报告(总)
几乎所有的应用程序开发者都知道"用户体验"重视,为了增强用户体验是从全面的监测和报告制度密不可分,在这些日志(控制Crash报告)是主要的问题跟踪和解决工具. 日志上报系统.首先看 ...
- crm创建报告补充导航
报告导航实现动态交互体验报告. 通过使用各种类型的操作的,报告允许用户导航到特定的报告.Microsoft Dynamics CRM 记录或其它网站 动态钻取到 Microsoft Dynamics ...
- TCP/IP 网络编程(六)
流程模型: 线程模型: 线程的创建和运行流程 #include <pthread.h> int pthread_create(pthread_t * restrict thread, co ...
- 位运算总结&拾遗
JavaScript 位运算总结&拾遗 最近补充了一些位运算的知识,深感位运算的博大精深,此文作为这个系列的总结篇,在此回顾下所学的位运算知识和应用,同时也补充下前文中没有提到的一些位运算知识 ...
- Vim 命令 【转】
高级一些的编辑器,都会包含宏功能,vim当然不能缺少了,在vim中使用宏是非常方便的: :qx 开始记录宏,并将结果存入寄存器xq 退出记录模式@x 播放记录在x寄存器中的宏命 ...
- php:的图形计算器的面向对象的版本武器2
通过自带部分result.class.php分流,由于这三个类继承shape这个类,让我们来看看,面向对象的继承. shape.class.shape档 <?php abstract class ...
- HDU 1203 I NEED A OFFER!(dp)
Problem Description Speakless很长时间,我想出国.现在,他已经完成了所有需要的检查.准备好所有要准备的材料,于是,便须要去申请学校了.要申请国外的不论什么大学.你都要交纳一 ...