2010-08-19 65 views
0

这是一个反复讨论的主题,我仍不满意所有部分如何组合在一起:ViewPage/ViewMasterPage,ViewPage.Model,等等。将强类型数据传递给ViewMasterPage和ViewPage

我已经输入了模型数据必须传递给MasterPage和ViewPage的承诺。传递的数据不需要在MasterPage和ViewPage之间共享,以防万一。

我结束了像一个黑客位在职的感觉解决方案:使用ViewMasterPage.Model

的MasterViewPage访问其数据:

1.我抽象控制器和推翻的OnActionExecuted方法

protected override void OnActionExecuted(ActionExecutedContext filterContext) { ViewData.Model = new CPanelViewData() { Errors = Errors, Warnings = Warnings, Notifications = Notifications }; base.OnActionExecuted(filterContext); } 

2.我用的是Controller.View(字符串的viewName,对象模型)在我的操作方法:的ViewPage是由通用的,也就是说的ViewPage < FileManagerViewPage>

public class FileManagerControlPanelController : CPanelController 
{ 
    private FileManagerViewPage viewPage = new FileManagerViewPage(); 

    public ActionResult AddFolder(string name, string path) { 
     ... 
     ... 
     return View("Index", viewPage); 
    } 

之所以这么说,我不知道如果这个解决方案是合法的。有没有更好的方式将模型数据提供给MasterPage和View?

回答

0

为了那些和我一样处境相同的人,我会详细说明我解决的问题。

1.我创建了一个抽象类,它代表Master View Model。

public abstract class CpFileMgrMasterViewModel { ... } 

2.我创建继承的类,它表示查看页面模型。

public class CpFileMgrViewModel:CpFileMgrMasterViewModel { ... } 

3.我创建一个抽象的,通用的控制器,其提供了处理主模型的方法和接受视图模型类型的TModel。

public abstract class CpFileMgrController<TModel>:Controller 
    where TModel: class, new() 
{ 
    private TModel _model = new TModel(); 
    public TModel Model{ get{ return _model; } } 

    public CpFileMgrController() { 
     ViewData.Model = _model; 
    } 
} 

4.我放置在两个母版视图和视图页面到他们的一般形式,利用上述两类:

<%@ Master Language="C#" Inherits="System.Web.Mvc.ViewMasterPage<CpFileMgrMasterViewModel>" %> 

<%@ Page Language="C#" MasterPageFile="~/Views/Shared/....Master" 
Inherits="System.Web.Mvc.ViewPage<CpFileMgrViewModel>" %>