参考:Scott Blog
ASP.NET MVC Framework (Part 3): Passing ViewData from Controllers to Views
在ASP.NET MVC Framework中把ViewData从控制器传到视图的方法有通过弱类型和强类型两种,简述其用法并分析其优缺点。
1) 弱类型
通过ViewData Dictionary进行传递,视图文件继承于ViewPage
在Controller Action中对ViewData进行赋值
ViewData["ProductList"] = ...
ViewData["CategoryName"] = ...
RenderView("viewName")
在视图中调用时要对ViewData["ProductList"] 进行显示转换实际的类型
ViewData["ProductList"] as List<Product>
ViewData["CategoryName"] as string
优点:数据传输灵活
缺点:在视图中要进行显式转换
2) 强类型
视图文件继随于ViewPage<TViewData>, TViewData即为从Controller传递到Views的数据
在Controller->Action中真接RenderView("viewName", TViewData)传递数据即可
RenderView只能传递一种类型的数据,如果想传递更多类型的数据,就必须把想传递的数据封装成一个对象进行传递
优点: 不用显式转换数据
缺点: 必须写额外的对象
注:1) 仅仅对于.aspx视图才会存在所谓[弱类型]和[强类型]数据传递的区别,对于其它的视图引擎则不会区分这种情况。
2) 弱类型和强类型的数据传输只能同时使用一种传输方式,不能混合使用。
RenderView method In Controller class:
protected void RenderView(string viewName);
protected void RenderView(string viewName, object viewData);
protected void RenderView(string viewName, string masterName);
protected virtual void RenderView(string viewName, string masterName, object viewData);