asp.net-core – 从ActionFilterAttribute设置ViewBag
|
我正在创建可以由用户设置的自定义颜色的网站(仅在某些页面上).我想在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进行异步编程的最佳方法
- asp.net 2.0中利用Ajax2.0实现JSON传送大量页面数据
- asp.net-mvc – MVC发布IPagedList
- asp.net – 从用户控件访问父页面属性
- asp.net-mvc – 失败的ASP.NET MVC路由.这是一个错误还是角
- asp.net – 使PDF显示内联而不是单独的Acrobat Reader窗口
- asp.net – App_Start文件夹在ASP 4.5仅在WebApplications项
- entity-framework – 未找到可执行文件匹配命令“dotnet-ef
- ASP.NET身份和移动客户端
- asp.net-mvc – ASP.net MVC CheckBoxFor转换错误
- asp.net – Web API服务 – 如何在异步任务中使用
- asp.net-mvc – Validator.TryValidateObject不验
- asp.net – 将machineKey添加到machine.config
- asp.net-mvc-3 – RedirectResult Object作为URL
- asp.net-mvc – 如何在回发后保持dropdownlist选
- WCF WebServiceHostFactory MaxReceivedMessageS
- asp.net-mvc – 在默认的asp.net mvc 5模板中输入
- ADO.NET读书笔记系列
- asp.net-mvc – Asp.Net MVC中的管理区域
- 防止双击asp.net按钮
