1

次のアクションがあるとします。

public ActionResult DoSomething()
{
    // Some business logic
    return RedirectToAction("AnotherAction", RouteData.Values);
}

public ActionResult AnotherAction(string name, int age)
{
   ...
}

そして、次のフォーム:

<form method="post" action="DoSomething">
    <input name="name" type="text" />
    <input name="age" type="text" />
    <input type="submit" value="Go" />
</form>

そのフォームで送信を押すと、DoSomethingアクションに移動し、 AnotherActionに移動して、関連するすべての値をnameageに渡します。それは御馳走になります!

しかし、 DoSomething からリダイレクトすると失われるため、 AnotherActionで送信された他のフォーム値にアクセスすることはできません。

public ActionResult AnotherAction(string name, int age)
{
   // This won't work
   var other = Request.Form["SomeDynamicVariable"];
}

より理想的なのはTransferToActionメソッドで、代わりにフォームがAnotherActionに投稿されたことを「想像」して MVC エンジンを再実行します。

return TransferToAction("AnotherAction");

これはできますか?

この機能がすぐに利用できない場合は、作成してブログに投稿し、投稿します。

4

4 に答える 4

1

Request.Form を格納するには、TempData コンストラクトを使用します。TempData は指定されたリクエストに対してのみ存在するため、処理が終了するとクリアされます。

public ActionResult DoSomething()
{
    // Some business logic
    TempData["PostedFormValues"] = Request.Form;
    return RedirectToAction("AnotherAction", RouteData.Values);
}

public ActionResult AnotherAction(string name, int age)
{
   ...
   if (TempData["PostedFormValues"] != null)
   {
       //process here
   }
}
于 2009-08-26T15:13:31.820 に答える
1

コントローラーアクションも有効なパブリック関数であるため、これを行うことができます

public ActionResult DoSomething(){    
// Some business logic    
// Get Params from Request
      return AnotherAction(name, age);
}

public ActionResult AnotherAction(string name, int age){
   ...
}

AnotherAction から Request オブジェクトにアクセスすると、明らかに別のリクエストを行っていないため、同じです。

于 2009-09-02T15:30:58.907 に答える
0

これを行う 1 つの方法は、最初のアクションから 2 番目のアクションを呼び出し、応答を取得することです。here で説明されているように、これは簡単ではありません。

于 2009-09-02T15:21:15.463 に答える