使用自定义属性扩展 ASP.NET MVC 视图结果

本文关键字:MVC 视图 结果 NET ASP 自定义属性 扩展 | 更新日期: 2023-09-27 17:56:11

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

    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 中,然后从视图袋在视图中访问它。

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

使用自定义属性扩展 ASP.NET MVC 视图结果

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

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

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在视图中访问它。