1. ホーム
  2. c#

RedirectToActionでModelStateを維持するにはどうしたらいいですか?

2023-10-16 09:31:48

質問

でエラーが発生した場合、別のアクションの結果を返したり、ユーザーを別のアクションに移動させたりするにはどうしたらよいでしょうか。 ModelState を失うことなく ModelState の情報を失うことなく?

シナリオは Delete アクションがレンダリングした DELETE フォームから POST を受け取ります。 Index アクション/ビューでレンダリングされます。 もし Delete にユーザーを戻したい。 Index アクション/ビューに戻し、エラーを表示します。 Delete アクションで保存されたエラーを ViewData.ModelState . ASP.NET MVCでこれを行うにはどうしたらよいでしょうか。

[AcceptVerbs(HttpVerbs.Post | HttpVerbs.Delete)]
public ActionResult Delete([ModelBinder(typeof(RdfUriBinder))] RdfUri graphUri)
{
    if (!ModelState.IsValid)
        return Index(); //this needs to be replaced with something that works :)

    return RedirectToAction("Index");
}

どのように解決するのですか?

ビューのデータを TempData に格納し、そこから Index アクションがあれば、そこから取得します。

   ...
   if (!ModelState.IsValid)
       TempData["ViewData"] = ViewData;

   RedirectToAction( "Index" );
}

 public ActionResult Index()
 {
     if (TempData["ViewData"] != null)
     {
         ViewData = (ViewDataDictionary)TempData["ViewData"];
     }

     ...
 }

[EDIT] MVCのオンラインソースを確認したところ、どうやら ViewData は設定可能なようなので、おそらく、すべての ViewData を含むすべての ModelState をインデックスアクションに追加します。