Allen Wang

专注web开发
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理
 参考: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);