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. 我的第一次windows规划

    #include <windows.h>   LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM) ; //WinMain功能被分配一 ...

  2. 跳跃Java一些周期,双跳FOR周期

    今天写的代码写在一个双层for周期,目前仍在使用Iterator,大致意思是假定在第二个周期在排位赛中给了整个双回路跳. 刚開始,直接使用break.巴拉巴拉的敲了一堆代码,信心满满的就直接执行.等到 ...

  3. fastboot完成自己主动命令

    于Ubuntu13.10后来Ubuntu 14.04上,由APT安装fastboot以及adb该工具后, 发现fastboot在主动补充一个问题,, fastboot flash 自己主动有问题完成后 ...

  4. Android日志收集功能设计和实施报告(总)

    几乎所有的应用程序开发者都知道"用户体验"重视,为了增强用户体验是从全面的监测和报告制度密不可分,在这些日志(控制Crash报告)是主要的问题跟踪和解决工具. 日志上报系统.首先看 ...

  5. crm创建报告补充导航

    报告导航实现动态交互体验报告. 通过使用各种类型的操作的,报告允许用户导航到特定的报告.Microsoft Dynamics CRM 记录或其它网站 动态钻取到 Microsoft Dynamics ...

  6. TCP/IP 网络编程(六)

    流程模型: 线程模型: 线程的创建和运行流程 #include <pthread.h> int pthread_create(pthread_t * restrict thread, co ...

  7. 位运算总结&拾遗

    JavaScript 位运算总结&拾遗 最近补充了一些位运算的知识,深感位运算的博大精深,此文作为这个系列的总结篇,在此回顾下所学的位运算知识和应用,同时也补充下前文中没有提到的一些位运算知识 ...

  8. Vim 命令 【转】

    高级一些的编辑器,都会包含宏功能,vim当然不能缺少了,在vim中使用宏是非常方便的: :qx     开始记录宏,并将结果存入寄存器xq     退出记录模式@x     播放记录在x寄存器中的宏命 ...

  9. php:的图形计算器的面向对象的版本武器2

    通过自带部分result.class.php分流,由于这三个类继承shape这个类,让我们来看看,面向对象的继承. shape.class.shape档 <?php abstract class ...

  10. HDU 1203 I NEED A OFFER!(dp)

    Problem Description Speakless很长时间,我想出国.现在,他已经完成了所有需要的检查.准备好所有要准备的材料,于是,便须要去申请学校了.要申请国外的不论什么大学.你都要交纳一 ...