0

ASP.NET MVC 4 の get および post プロセスについて質問があります。よく話題になると思いますが、このトピックを検索するのは簡単ではありません。

説明してみましょう:

標準的な方法でコントローラーを起動します。

[HttpGet]
    public ActionResult Item()

したがって、この関数では、ユーザー ID などの多くの重要なデータを取得します。私の場合、viewbag() でデータを収集して、フォームを表示する必要があるかどうかを判断します。

ここで、ポスト バックを開始すると、次のようになります。

        [HttpPost]
    public ActionResult Item(FormCollection formCollection)

この関数は、標準の View() を返します。

問題は、post メソッドの後に、GET メソッドのビジネス ロジック (ユーザー ID の取得など) が呼び出されないことです... で解決しようとしました

return this.RedirectToAction("Item");

しかし、それは本当に最初からロジックを繰り返すための解決策ですか (get)? また、post メソッドから get メソッドに新しい値を渡すにはどうすればよいでしょうか?

よろしく、パトリック

4

1 に答える 1

1

そのパターンはPost/Redirect/Getと呼ばれます。

追加のデータを GET メソッドに渡すには、MvcContrib から TempData とModelStateToTempDataAttributeを使用できます。Redirectが返される場合は ModelState を tempdata に渡し、View が返される場合は tempdata を modelstate に渡します。

[HttpGet]
[ModelStateToTempData]
public ActionResult Item(int id)
{
     // prepare view

     return View();
}

[HttpPost]
[ModelStateToTempData]
public ActionResult Item(FormCollection formCollection)
{
     // do some business logic
     int id = service.DoBusinessLogicAndReturnSomeId();

     return this.RedirectToAction("Item", new { id });
}

GET にビジネス ロジックを含めることは避ける必要があります。すべてのビジネス ロジックは POST メソッド内にある必要があり、それを呼び出した後、ビューを準備する GET にリダイレクトできます。

于 2013-01-17T21:15:47.493 に答える