asp.net-core – 从ActionFilterAttribute设置ViewBag
发布时间:2020-12-15 18:59:44 所属栏目:asp.Net 来源:网络整理
导读:我正在创建可以由用户设置的自定义颜色的网站(仅在某些页面上).我想在ActionFilterAttribute中获取该数据并将其设置在ViewBag中,以便我可以在_Layout.cshtml中获取数据. 这是我的ActionFilterAttribute …… public class PopulateColorOptionsAttribute : A
我正在创建可以由用户设置的自定义颜色的网站(仅在某些页面上).我想在ActionFilterAttribute中获取该数据并将其设置在ViewBag中,以便我可以在_Layout.cshtml中获取数据.
这是我的ActionFilterAttribute …… public class PopulateColorOptionsAttribute : ActionFilterAttribute { private readonly OptionsDataHelper optionsDataHelper; public PopulateOptionsAttribute(OptionsDataHelper optionsDataHelper) { this.optionsDataHelper = optionsDataHelper; } public override async Task OnActionExecutionAsync(ActionExecutingContext context,ActionExecutionDelegate next) { await base.OnActionExecutionAsync(context,next); // Get the cemetery data and set it on the view bag. var personId = Convert.ToInt32(context.RouteData.Values["personId"]); context.Controller.ViewBag.OptionsData = await optionsDataHelper.GetValueAsync(personId,CancellationToken.None); } } 不幸的是,我在ViewBag上收到一条错误,指出:
我很确定我对滤波器没有正确理解,我很欣赏如何实现我想要的指导. 解决方法
ActionExecutingContext.Controller声明为Object类型,因为框架不对哪些类可以作为控制器施加任何限制.
如果您始终创建从基本Controller类继承的控制器,那么您可以在过滤器中使用该假设并将context.Controller用作Controller: public override async Task OnActionExecutionAsync(ActionExecutingContext context,ActionExecutionDelegate next) { await base.OnActionExecutionAsync(context,next); var controller = context.Controller as Controller; if (controller == null) return; controller.ViewBag.Message = "Foo message"; } 如果你不能做出这个假设,那么你可以使用类似的方法检查上下文中的结果: public override async Task OnResultExecutionAsync(ResultExecutingContext context,ResultExecutionDelegate next) { var viewResult = context.Result as ViewResult; //Check also for PartialViewResult and ViewComponentResult if (viewResult == null) return; dynamic viewBag = new DynamicViewData(() => viewResult.ViewData); viewBag.Message = "Foo message"; await base.OnResultExecutionAsync(context,next); } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- asp.net – 为什么HttpContext.Current.User.Identity.Name
- asp.net-mvc – 在ajax请求中返回PDF
- 如何在ASP.NET中设置表单提交的目标框架?
- asp.net-mvc – Ninject – 具有参数/ Entity Framework连接
- 文件无刷新上传(swfUpload与uploadify)
- asp.net-mvc – 如何使用selenium进行ASP.NET MVC集成测试
- asp.net-core – 具有不同root的ASP.Net核心反向代理
- asp.net-mvc-3 – 用于创建自定义成员资格提供程序的示例代
- asp.net-mvc – MVC获得管理层批准
- 在ASP.NET MVC 3中更改Membership.ValidateUser()和其他内容
推荐文章
站长推荐
- asp.net-mvc – 在回发数据时,MVC如何填充模型
- asp.net – 如何调试Azure 500内部服务器错误[已
- asp.net-mvc – JSP相当于ASP.NET MVC的部分视图
- asp.net-mvc – 如何将ViewData传递给HandleErro
- .net-4.0 – 为什么我在一个新的MVC4项目中收到编
- asp.net – 许多用户的许多表?
- asp.net-mvc – MVC4 Web API或MVC3 JsonResult
- ASP.net RequiredFieldValidator VisualStudio 2
- 如何在ASP.Net MVC中实现ReverseAJAX(Comet)
- asp.net – 为什么我的验证在MVC3中的帖子之前触
热点阅读