2009-08-26 12 views
1

は、私は次のアクションを持っていると仮定します。あるアクションから別のアクションにASP.NET MVCリクエストを「転送」することはできますか?

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へ順番になります - 関連するすべての値をの名前年齢に渡します。それは治療を働く!

しかしdoSomethingのからリダイレクトするとき、彼らが失われているので、私は明らかに、AnotherActionで、他の送信されたフォームの値にアクセスすることはできません

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

TransferToAction方法は、より理想的である何、その

return TransferToAction("AnotherAction"); 
:MVCエンジンが再実行されるフォームは AnotherAction代わりに投稿されていたが、「想像」

これを行うことはできますか?

この機能をすぐに使用できない場合は、作成してブログに書き込んで投稿します。

答えて

1

TempData構造体を使用して、Request.Formを格納します。 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 
    } 
} 
+0

TempDataからフォームを取得するために特別なコーディングを必要としないTransferToActionほどうまくいきません – joshcomley

+0

コントローラ/ベースにTransferToActionメソッドをすばやく書き込むことができますコントローラクラス。:) –

+0

@lakario - 私はできましたが、私はMVCでそれを行うためのメカニズムが既に存在するかどうか疑問に思っていました:) – joshcomley

0

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

1

お使いのコントローラのアクションは、あなたが今、あなたは明らかに別の要求を行っていなかったので、それはまだ同じであるAnotherActionからRequestオブジェクトにアクセスするときに、この

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

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

を行うことができ、有効なパブリック関数 です。

0

一時データを使用してモデルステートを渡すことができます。 FilterAttributesをほとんど持たないので、プロセスが簡単になり、とても簡単です。

フィルター属性を正しく使用するには、http://ben.onfabrik.com/posts/automatic-modelstate-validation-in-aspnet-mvcとお読みください。また、このブログには、モデルステートとPRGパターンの適切なMVC操作に関する多くの情報が含まれています。

具体的なケースだけでなく、価値があります。

関連する問題