2

私はアクションと呼ばれる MVC のビューを持っています。これはパラメーターとして ID を受け入れます。Action という別のビューもありますが、HTTPPOST としてマークされています。

Action の POST バージョンは、プログラム的に失敗する可能性があります。失敗したら、ModelError を追加してから、ID を提供しながら、Action の GET バージョンにリダイレクトします。

要するに=> POSTビューからGETビューに転送し、パラメータを渡したい。の線に沿った何か

ModelState.AddModelError("", "Could not verify token");
return RedirectToAction("Action", "ExpiredAccounts" new { aid = myId });

ここで、Action はビュー、ExpiredAccounts はコントローラー、AID はアカウント ID です。リダイレクトせずにモデルエラーをビューに追加できるため、これはもちろん機能しません

ありがとう

4

1 に答える 1

8

この場合、リダイレクトするのではなく、同じビューを返すことをお勧めします。

ModelState.AddModelError("", "Could not verify token");
var model = repository.Get(myId);
return View(model);

Redirect-After-Postパターンの正しいフローは次のとおりです。

  1. GETリクエスト -> なんらかのフォームが表示される
  2. POST リクエスト -> フォームがサーバーに送信されます。ここで考えられる 2 つのケース:
    • 検証成功 => リダイレクト。
    • 検証に失敗 => ユーザーがエラーを修正できるように、同じビューを再表示する

このベスト プラクティスに違反したい場合は、リダイレクト時に常にエラー メッセージをクエリ文字列パラメーターとして送信できます。

return RedirectToAction(
    "Action", 
    "ExpiredAccounts" 
    new { aid = myId, error = "Could not verify token" }
);

次に、ターゲット アクションの側で、このパラメーターが指定されているかどうかを確認し、モデル状態にエラーを追加します。

public ActionResult Action(int myId, string error)
{
    if (!string.IsNullOrEmpty(error))
    {
        ModelState.AddModelError("", error);
    }
    ...
}
于 2013-05-18T05:58:28.430 に答える