asp.net-core-mvc – 在ExecuteResult Asp.Net MVC Core中访问Te
发布时间:2020-12-16 06:40:14 所属栏目:asp.Net 来源:网络整理
导读:我想在TempData中保存通知并向用户显示.我为此创建了扩展方法,并实现了一个从ActionResult扩展的类.我需要使用ActionContext在重写ExecuteResult方法中访问TempData. 扩展方法: public static IActionResult WithSuccess(this ActionResult result,string m
我想在TempData中保存通知并向用户显示.我为此创建了扩展方法,并实现了一个从ActionResult扩展的类.我需要使用ActionContext在重写ExecuteResult方法中访问TempData.
扩展方法: public static IActionResult WithSuccess(this ActionResult result,string message) { return new AlertDecoratorResult(result,"alert-success",message); } 扩展ActionResult类. public class AlertDecoratorResult : ActionResult { public ActionResult InnerResult { get; set; } public string AlertClass { get; set; } public string Message { get; set; } public AlertDecoratorResult(ActionResult innerResult,string alertClass,string message) { InnerResult = innerResult; AlertClass = alertClass; Message = message; } public override void ExecuteResult(ActionContext context) { ITempDataDictionary tempData = context.HttpContext.RequestServices.GetService(typeof(ITempDataDictionary)) as ITempDataDictionary; var alerts = tempData.GetAlert(); alerts.Add(new Alert(AlertClass,Message)); InnerResult.ExecuteResult(context); } } 从控制器调用扩展方法 return RedirectToAction("Index").WithSuccess("Category Created!"); 我得到’TempData’null,如何在’ExecuteResult’方法中访问’TempData’. 解决方法
我今天真的想要做同样的事情(我们看过同样的Pluralsight课程吗?;-))你的问题让我找到了如何访问TempData(谢谢!).
在调试时我发现从未调用过ExecuteResult上的覆盖,这导致我尝试使用新的异步版本.这很有效! 你需要做的是改写ExecuteResultAsync: public override async Task ExecuteResultAsync(ActionContext context) { ITempDataDictionaryFactory factory = context.HttpContext.RequestServices.GetService(typeof(ITempDataDictionaryFactory)) as ITempDataDictionaryFactory; ITempDataDictionary tempData = factory.GetTempData(context.HttpContext); var alerts = tempData.GetAlert(); alerts.Add(new Alert(AlertClass,Message)); await InnerResult.ExecuteResultAsync(context); } 但是,我还没有完全理解为什么调用异步方法因为控制器不是异步…需要对它进行一些阅读…… (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- asp.net-mvc-3 – 扩展MVC3剃刀Html.LabelFor添加css类
- asp.net-web-api – 从局域网中的其他计算机使用ASP.NET We
- asp.net-mvc – 将HttpRequestMessage转换为HttpRequest
- asp.net – 正则表达式验证器 – 动态显示块而不是内联
- 无法将Nuget包添加到ASP.NET vNext项目
- 如何清除代码背后的整个asp.net页面?
- asp.net-mvc – 如何使@ Html.EditorFor禁用
- ASP.NET Web API中除IQueryable之外的OData查询和类型
- 将ASP.NET MVC教给ASP.NET程序员的最佳学习资源是什么?
- asp.net – 如何从身体绑定时自定义模型绑定器?
推荐文章
站长推荐
热点阅读