2009-08-07 11 views
1

今、私はMVCアプリケーションのインデックスページからのPOSTに関連するアクションを持っています。しかし、私は、すべてのページ・ポストを処理するジェネリック・ハンドラ・アクションを必要とし、POST Handlerアクション内で、ちょうど私が来たビューを知りたいと思います。私が欲しいのは以下の通りです。コントローラと前のビュー

[AcceptVerbs(HttpVerbs.Post)] 
    public ActionResult GenericPostHandler(NewAccountInfo info) 
    { 
     try 
     { 
      string currentview = //how to get View for which to handle the POST? 
      Persist(); 

      return RedirectToAction(StepManager.GetNextStep(currentView)); 
     } 
     catch 
     { 
      return View(); 
     } 
    } 

答えて

0
[AcceptVerbs(HttpVerbs.Post)] 
public ActionResult GenericPostHandler(NewAccountInfo info, string fromViewName) 
{ 
    ... 
} 

<% var actionUrl = Url.RouteUrl(new { 
    controller = "yourcontroller", 
    action = "genericposthandler", 
    fromviewname = "whereyoucamefrom" 
}); %> 

<form action="<%= actionUrl %>" method="post"> 
    ... 
</form> 

は、私は、ワークフローを構築してい/yourcontroller/genericposthandler?fromviewname=whereyoucamefrom

1

は、私はあなたがある特定のコントローラ内の単一のアクションへのすべての要求を転送しますが、これは、すべてのHTTPコマンドに対してアクティブになり、GETまたはPOSTまたはそれ以外のルートを書くことができたとします。

あなたが達成しようとしているのは、MVCの精神に反するものです。おそらく、この要件の背後にある考え方は何ですか?

私は推測しようとします。それぞれの投稿で何らかの前処理をしたいのですが、そうですか?おそらく認証チェック、アクティビティ・ログなどです。もしそうなら、独自のActionFilterを実装し、この属性ですべてのコントローラを装飾することができます。その後、すべてのコールがこのフィルタによって傍受され、必要な処理を行います。次に、リクエストを通常のハンドラ(アクション)に渡すか、別の場所にルーティングします。ビューで

+1

のようなURLを生成します。基本的には、あなたがどのような視点から来たのかを知ることによって、私はどの視点に行くべきかを教えてくれるでしょう。しかし、これはMVCの精神に対してどうですか?私はまだアクションルーティングを行うためにコントローラを使用していますが、私は重複したコードを減らしてより一般的なものにしようとしています。ありがとう。 – Crios

関連する問題