[英]Passing parameters on button click in strongly-typed view to another controller
[英]Passing Strongly-Typed Data to a ViewMasterPage and ViewPage
这是一遍又一遍的主题,我对所有部分如何组合仍然不满意:ViewPage / ViewMasterPage,ViewPage.Model等。
我已进入一项保证,必须将模型数据传递给MasterPage和从其派生的ViewPage。 传下来的数据不需要在MasterPage和ViewPage之间共享,以防万一。
我最终得到的解决方案有点像黑客般的工作:
1.我对Controller进行了抽象,并覆盖了OnActionExecuted方法:MasterViewPage使用ViewMasterPage.Model访问其数据。
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?
为了使那些最终陷入与我相同的境地,我将详细说明我所选择的解决方案。
1.我创建了一个抽象类,它代表主视图模型。
public abstract class CpFileMgrMasterViewModel { ... }
2.我创建了一个继承的类,它表示视图页面模型。
public class CpFileMgrViewModel:CpFileMgrMasterViewModel { ... }
3.我创建了一个抽象的通用控制器,该控制器提供处理主模型并接受View Model类型为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>" %>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.