C# 将强类型数据传递到ViewMasterPage和ViewPage

C# 将强类型数据传递到ViewMasterPage和ViewPage,c#,asp.net,asp.net-mvc,C#,Asp.net,Asp.net Mvc,这是一个已经被反复讨论过的话题,我仍然不太清楚所有的部分是如何组合在一起的:ViewPage/ViewMasterPage、ViewPage.Model等等 我已经进入了一个任务,模型数据必须同时传递到母版页和从母版页派生的视图页。传递下来的数据不需要在母版页和视图页之间共享,以防出现问题 我最终得到的解决方案感觉有点像黑客的工作: 1。我抽象了控制器并重写了OnActionExecuted方法:MasterViewPage使用ViewMasterPage.Model访问其数据 2。我在操作方法

这是一个已经被反复讨论过的话题,我仍然不太清楚所有的部分是如何组合在一起的:ViewPage/ViewMasterPage、ViewPage.Model等等

我已经进入了一个任务,模型数据必须同时传递到母版页和从母版页派生的视图页。传递下来的数据不需要在母版页和视图页之间共享,以防出现问题

我最终得到的解决方案感觉有点像黑客的工作:

1。我抽象了控制器并重写了OnActionExecuted方法:MasterViewPage使用ViewMasterPage.Model访问其数据

2。我在操作方法中使用Controller.View(字符串viewName,对象模型):ViewPage是通用的,即ViewPage

    protected override void OnActionExecuted(ActionExecutedContext filterContext) {

        ViewData.Model = new CPanelViewData() { Errors = Errors, Warnings = Warnings, Notifications = Notifications };

        base.OnActionExecuted(filterContext);
    }
public class FileManagerControlPanelController : CPanelController
{
    private FileManagerViewPage viewPage = new FileManagerViewPage();

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

尽管如此,我想知道这个解决方案是否合法。是否有更好的方法将模型数据提供给母版页并查看?

为了那些最终与我处境相同的人,我将详细介绍我解决的解决方案

1。我创建了一个表示主视图模型的抽象类。

public abstract class CpFileMgrMasterViewModel { ... }
public class CpFileMgrViewModel:CpFileMgrMasterViewModel { ... }
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;
    }
}
2。我创建了一个继承的类,它表示视图页面模型。

public abstract class CpFileMgrMasterViewModel { ... }
public class CpFileMgrViewModel:CpFileMgrMasterViewModel { ... }
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;
    }
}
3。我创建了一个抽象的通用控制器,它提供了处理主模型并接受视图模型类型为TModel的方法。

public abstract class CpFileMgrMasterViewModel { ... }
public class CpFileMgrViewModel:CpFileMgrMasterViewModel { ... }
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;
    }
}
公共抽象类CpFileMgrController:控制器
其中TModel:class,new()
{
私有TModel_model=新TModel();
公共TModel模型{get{return\u Model;}}
公共CpFileMgrController(){
ViewData.Model=\u Model;
}
}
4。我使用上面的两个类将主视图和视图页面都设置为通用形式:

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

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