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

时间:2011-05-10 06:04:09

标签: c# asp.net-mvc

对于我的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);
    }

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

我真正想要的是动作本身直接在ViewResult上使用ClientSettings属性,以便我可以直接从视图中访问它,但我不确定如何做到这一点?

1 个答案:

答案 0 :(得分:1)

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

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

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,并通过Model的{​​{1}}属性在您的视图中访问它。