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

  1. ASP.NET Core 中文文档 第二章 指南(4.3)添加 View

    原文:Adding a view 作者:Rick Anderson 翻译:魏美娟(初见) 校对:赵亮(悲梦).高嵩(Jack).娄宇(Lyrics).许登洋(Seay).姚阿勇(Dr.Yao) 本节将 ...

  2. 在Asp.net MVC 3 web应用程序中,我们会用到ViewData与ViewBag,对比一下:

    Asp.net MVC中的ViewData与ViewBag ViewData ViewBag 它是Key/Value字典集合 它是dynamic类型对像 从Asp.net MVC 1 就有了 ASP. ...

  3. 创建ASP.NET Core MVC应用程序(1)-添加Controller和View

    创建ASP.NET Core MVC应用程序(1)-添加Controller和View 参考文档:Getting started with ASP.NET Core MVC and Visual St ...

  4. 白话学习MVC(十)View的呈现二

    本节将接着<白话学习MVC(九)View的呈现一>来继续对ViewResult的详细执行过程进行分析! 9.ViewResult ViewResult将视图页的内容响应给客户端! 由于Vi ...

  5. 白话学习MVC(九)View的呈现一

    一.概述 本节来看一下ASP.NET MVC[View的呈现]的内容,View的呈现是在Action执行之后进行,Action的执行生成一个ActionResult,[View的呈现]的功能就是:通过 ...

  6. 《ASP.NET MVC4 WEB编程》学习笔记------.net mvc实现原理ActionResult/View

    ActionResult ActionResult是Action的返回结果.ActionResult 有多个派生类,每个子类功能均不同,并不是所有的子类都需要返回视图View,有些直接返回流,有些返回 ...

  7. ASP.NET MVC 中的ViewData与ViewBag

    在Asp.net MVC 3 web应用程序中,我们会用到ViewData与ViewBag,对比一下: ViewData ViewBag 它是Key/Value字典集合 它是dynamic类型对像 从 ...

  8. Part 3 ViewData and ViewBag in mvc

    ViewBag and ViewData is a mechanism(机制) to pass data from controller to view. We use '@' symbol(符号) ...

  9. Asp.net MVC中的ViewData与ViewBag

    Asp.net MVC中的ViewData与ViewBag 在Asp.net MVC 3 web应用程序中,我们会用到ViewData与ViewBag,对比一下: ViewData ViewBag 它 ...

随机推荐

  1. Eclipse+Maven创webapp工程

    1.开启eclipse,右键new-->other,例如以下图找到maven project. 选择maven project,点击next 2.选择maven project后.显示创建mav ...

  2. 经验36--C#无名(大事,物...)

    有时候,方便代码,它会使用匿名的东西. 1.匿名事件 args.CookieGot += (s, e) =>                 {                     this ...

  3. ipad pro注定是失败的!

    ipad pro注定是失败的! 把一个玩具操作系统装在生产力工具上就能产生生产力了? so young so simple!

  4. UVA11992 - Fast Matrix Operations(段树部分的变化)

    UVA11992 - Fast Matrix Operations(线段树区间改动) 题目链接 题目大意:给你个r*c的矩阵,初始化为0. 然后给你三种操作: 1 x1, y1, x2, y2, v ...

  5. B/S 类项目改善

    B/S 类项目改善的一些建议   要分享的议题 性能提升:在访问量逐渐增大的同时,如何增大单台服务器的 PV2 上限,增加 TPS3 ? RESTful:相较于传统的 SOAP1,RESTful 风格 ...

  6. eclipse 配置android sdk和maven

    首先下载 ADT-22.2.0.rar eclipse-jee-kepler-R-win32-x86_64.zip android SDK4.2.zip 分别解压在一个盘 将ADT里面的两个目录内容相 ...

  7. 承诺c指针 (1)指针是地址

    (1)是地址 首先明白一个观点:指针就是地址.这是理解指针的起始一步. 直观感受下.变量的地址 int main() { int foo; int *foo_p; foo = 5; foo_p = & ...

  8. 也许游戏 它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  ...

  9. Moq 和RhinoMocks

    Moq & RhinoMocks 使用Mock对象进行测试一般都会有以下三个关键步骤: 使用接口来描述需要测试的对象 为实际的产品代码实现这个接口 以测试为目的,在Mock对象中实现这个接口 ...

  10. Hash散列算法 Time33算法

    hash在开发由频繁使用.今天time33也许最流行的哈希算法. 算法: 对字符串的每一个字符,迭代的乘以33 原型: hash(i) = hash(i-1)*33 + str[i] ; 在使用时.存 ...