繁体   English   中英

使用自定义属性扩展ASP.NET MVC ViewResult

[英]Extend ASP.NET MVC ViewResult with Custom Properties

对于我的asp.net mvc项目,无论何时返回视图,我都将通过重写OnActionExecuted方法来在基本控制器中附加几个属性,如下所示:

    protected override void OnActionExecuted(ActionExecutedContext filterContext)
    {
        if(filterContext.Result.GetType() == typeof(ViewResult))
        {
            var action = filterContext.Result as ViewResult;
            action.ViewBag.ClientSettings = ClientSettings;
        }

        base.OnActionExecuted(filterContext);
    }

我目前将ClientSettings粘贴在ViewBag中,然后从Viewbag的视图中访问它。

我真正想要的是动作本身直接在ViewResult上具有ClientSettings属性,这样我可以依次从视图直接访问它,但是我不确定如何执行此操作?

我们正在使用强类型视图并存储像您在模型属性中描述的内容。

您的案例(基本控制器代码):

protected override void OnActionExecuted(ActionExecutedContext filterContext)
{
    var viewModel = filterContext.Controller.ViewData.Model as ViewModelBase;
    if (viewModel != null)
    {
        viewModel.ClientSettings = ClientSettings;
    }

    base.OnActionExecuted(filterContext);
}

现在,如果您的视图模型是从ViewModelBase继承的,则可以从基本控制器设置ClientSettings,并通过ViewPage<T> Model属性在视图中访问它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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