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