Html Helpers BulletedList
2012-09-26 22:21 yezhi 阅读(281) 评论(0) 编辑 收藏 举报public static string BulletedList(this HtmlHelper helper, string name) { var items = helper.ViewData.Eval(name) as IEnumerable; if (items == null) throw new NullReferenceException("Cannot find " + name + " in view data"); var writer = new HtmlTextWriter(new StringWriter()); // Open UL writer.RenderBeginTag(HtmlTextWriterTag.Ul); foreach (var item in items) { writer.RenderBeginTag(HtmlTextWriterTag.Li); writer.Write(helper.Encode(item)); writer.RenderEndTag(); writer.WriteLine(); } // Close UL writer.RenderEndTag(); // Return the HTML string return writer.InnerWriter.ToString(); }
/**************************************************************************/
View & ViewData(转自:http://hi.baidu.com/kongfl888/item/ebc72ddc10777813e0f46f81)
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") %>
----------------------------------------------------------