繁体   English   中英

将强类型的数据传递给ViewMasterPage和ViewPage

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM