通知をTempData
に保存してユーザーに表示したかったのですが、このための拡張メソッドを作成し、ActionResult
から拡張するクラスを実装します。 でのoverride ExecuteResult
メソッドにアクセスする必要があります。ExecuteResult Asp.Net MVCコアの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!");
から
コール拡張メソッド私は、私は 'ExecuteResult' メソッドで 'TempDataを' にアクセスすることができますどのように、 'TempDataを' ヌルを取得します。
はい私たちは同じコースをします。私のExecuteResultが呼び出されましたが、警告がTempDataに永続化されませんでした。私は非同期メソッドでも試みましたが、問題は同じです。アラートは持続せず、表示されませんでした。あなたはこれをやりましたか? – Ahmar
(遅れて申し訳ありません、新しい年が来ました:-)はい、それは私のために働いています、私は私のビューでTempData.GetAlertsにアクセスし、そこからデータを取得することができます。ナゲットパッケージ "Microsoft.AspNetCore.Session"と "Microsoft.Extensions.Caching.Memory"を追加し、次に "services.AddMemoryCache(); services.AddSession();"を追加するセッションを有効にする必要がありましたStartup.csのConfigureServicesメソッド内にあります。そして、 "app.UseSession();" Configureメソッドを使用します。 –
私は同じことをやっていますが、ビュー内のTempDataにアクセスすると、それは常に空ですか? – Cocowalla