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 = 13 };

  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 = 13 };

  return View();

}

 

  Index.aspx

<%= ViewData.Eval("user.Name") %>

 

----------------------------------------------------

  Eval() 还能处理更深度的访问。

--------------------------------------------------------------------------

public ActionResult Index()

{

  ViewData["user"] = new

  {

    Name = "Tom",

    Age = 13,

    Data = new { X = 1, Y = 2 }

  };

  return View();

}

 

  Index.aspx

<%= ViewData.Eval("user.Data.y") %>

 

-----------------------------------------------------------

  ViewData Key 还允许出现 "." 符号,试试看。

----------------------------------------------------------------------------

public ActionResult Index()

{

  ViewData["user.xxx"] = new

  {

    Name = "Tom",

    Age = 13,

    Data = new { X = 1, Y = 2 }

  };

  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 = 13,

    Data = new Dictionary<string, int> { { "x", 1 }, { "y", 2 } }

  };

  return View();

}

 

  Index.aspx

<%= ViewData.Eval("user.Data.y") %>

 

----------------------------------------------------------

你可能感兴趣的:(view)