[解決済み] ASP.NET MVC - RedirectToActionでModelStateエラーを保存する方法は?
2023-01-08 12:20:11
質問
以下の2つのアクションメソッドがあります(質問のため簡略化しています)。
[HttpGet]
public ActionResult Create(string uniqueUri)
{
// get some stuff based on uniqueuri, set in ViewData.
return View();
}
[HttpPost]
public ActionResult Create(Review review)
{
// validate review
if (validatedOk)
{
return RedirectToAction("Details", new { postId = review.PostId});
}
else
{
ModelState.AddModelError("ReviewErrors", "some error occured");
return RedirectToAction("Create", new { uniqueUri = Request.RequestContext.RouteData.Values["uniqueUri"]});
}
}
というわけで、バリデーションが通ったら、別のページ(確認ページ)にリダイレクトします。
エラーが発生した場合は、エラーが発生したページと同じページを表示する必要があります。
もし私が
return View()
を実行すると、エラーが表示されます。
return RedirectToAction
(を実行すると、Modelのエラーは表示されなくなります。
私はこの問題に驚いていません。ただ、皆さんがこれをどのように扱っているのかが気になります。
もちろん、リダイレクトの代わりに同じビューを返すこともできますが、私はビューデータを入力する "Create" メソッドにロジックを持っており、それを複製する必要があります。
何か提案はありますか?
どのように解決するのですか?
同じインスタンスの
Review
の上に
HttpGet
アクションに追加します。
これを行うには、オブジェクト
Review review
をtemp変数に保存してください。
HttpPost
アクションでそれを復元し
HttpGet
アクションにリストアします。
[HttpGet]
public ActionResult Create(string uniqueUri)
{
//Restore
Review review = TempData["Review"] as Review;
// get some stuff based on uniqueuri, set in ViewData.
return View(review);
}
[HttpPost]
public ActionResult Create(Review review)
{
//Save your object
TempData["Review"] = review;
// validate review
if (validatedOk)
{
return RedirectToAction("Details", new { postId = review.PostId});
}
else
{
ModelState.AddModelError("ReviewErrors", "some error occured");
return RedirectToAction("Create", new { uniqueUri = Request.RequestContext.RouteData.Values["uniqueUri"]});
}
}
の最初の実行の後にブラウザがリフレッシュされても動作するようにしたい場合。
HttpGet
アクションの最初の実行後にブラウザがリフレッシュされた場合でも動作させたい場合は、このようにします。
Review review = TempData["Review"] as Review;
TempData["Review"] = review;
その他、リフレッシュボタンオブジェクトの場合
review
には何のデータもないので、空っぽになります。
TempData["Review"]
.
関連
-
[解決済み] PHPのエラーを表示させるにはどうしたらいいですか?
-
[解決済み] ファイルアップロード ASP.NET MVC 3.0
-
[解決済み] ASP.NET MVC Frameworkで複数のサブミットボタンを処理する方法は?
-
[解決済み] ASP.NET MVCでenumからドロップダウンリストを作成するにはどうすればよいですか?
-
[解決済み] ASP.NET MVCでビューをコンパイルする
-
[解決済み] ASP.Net MVCのmodelStateからすべてのエラーを取得する方法は?
-
[解決済み] ASP.NET MVCのビューを文字列としてレンダリングする方法は?
-
[解決済み】MVC4 DataType.Date EditorForがChromeで日付の値を表示しない、Internet Explorerでは問題なし。
-
[解決済み] Entity Frameworkのデータベースを再作成する方法は?
-
[解決済み] ASP.NET MVC ModelStateのエラーをjsonに変換する方法
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】同じキーのアイテムがすでに追加されています。
-
[解決済み] glyphicons-halflings-regular.woff2 not foundに関するエラーを削除する方法
-
[解決済み] 既存のデータベースの選択されたテーブルからDbContextをScaffoldすることができますか[重複]。
-
[解決済み】ASP.NET MVC 3 razor ViewStart ファイルで異なるレイアウトを指定するには?
-
[解決済み】MVCアプリケーションでデータをキャッシュする方法
-
[解決済み】MVC4 DataType.Date EditorForがChromeで日付の値を表示しない、Internet Explorerでは問題なし。
-
[解決済み】ASP.NET MVC Html.ValidationSummary(true) でモデルエラーが表示されない。
-
[解決済み】ViewModelのベストプラクティス
-
[解決済み] MVCのHTMLヘルパーで生成されたHTML要素にclass属性を追加するにはどうすればよいですか?
-
[解決済み] ASP.NET MVCとIIS7で生のHTTPリクエスト/レスポンスをログに記録する