gpt4 book ai didi

asp.net-core-mvc - 在 ExecuteResult Asp.Net MVC Core 中访问 TempData

转载 作者:行者123 更新时间:2023-12-03 18:30:10 29 4
gpt4 key购买 nike

我想在 TempData 中保存通知并显示给用户。我为此创建了扩展方法并实现了一个从 ActionResult 扩展的类.我需要访问 TempDataoverride ExecuteResult方法与 ActionContext .

扩展方法:

 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);
}
}

从 Controller 调用扩展方法
return RedirectToAction("Index").WithSuccess("Category Created!");

我得到 'TempData' null ,如何在 'ExecuteResult' 方法中访问 'TempData'。

enter image description here

最佳答案

我今天确实在尝试做完全相同的事情(我们看过相同的 Pluralsight 类(class)吗?;-) )并且您的问题让我找到了如何访问 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);
}

但是,我还没有完全理解为什么要调用 async 方法,因为 Controller 不是异步的……需要对此做一些阅读……

关于asp.net-core-mvc - 在 ExecuteResult Asp.Net MVC Core 中访问 TempData,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41200597/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com