2009-09-18 11 views
6

私はいくつかのアクションメソッドによって返されるいくつかのビューによってレンダリングされる部分的なビューを持っています。ASP.NET MVC - 現在のアクションを部分ビューから取得する方法

部分ビューには、呼び出されたアクションメソッドにポストバックするフォームがあります。

は、それは私がちょうどビュー内から

<% Html.BeginForm(); %> 

を呼び出す場合というのが私の理解で、フォームのaction属性は、呼び出されたアクションメソッドを指します。 javascriptの目的でフォームのID属性を設定する必要があるため、これを行うことはできません。 HTML属性を設定できるHtml.BeginFormのオーバーロードには、明示的なコントローラとアクションが必要です。私はちょうどURLを取得するかどうかはわかりません

<form action="<%=(NEED TO SOMEHOW GET THE URL TO THE CURRENT ACTION) %>" method="post" id="myForm"> 

:だから、代わりにHTMLヘルパーを使用して、私は同じようにフォーム要素を書き出すことができます。

答えて

14

コントローラーとアクションにnullを渡すだけです。正しい値が代入されます。例:

<% using (Html.BeginForm(null, null, FormMethod.Post, new { id = "employeeGroupForm" })) 
+1

+1 - 確かに、私のやり方がありますし、簡単な方法があります:) –

+0

私を笑わせました! :) –

0

このような状況では、おそらくコントローラー(または親ビュー)にモデル/ ViewDataに適切なリンク先URLを設定するだけです。どのようにあなたのコントローラ内部用として

public ActionResult MyAction() { 
    MyModel m = new MyModel(); 

    ... 

    m.MyControlAction = "MyAction"; 
    m.MyControlController = "MyController"; 

    return View("MyView", m); 
} 

その後、あなたのビューで:

Html.RenderPartial("MyControl", ViewData.Model); 

そして、あなたの部分図:

Html.BeginForm(ViewData.Model.MyControlController, ViewData.Model.MyControlAction, ...) 

クリーナーの設計のために、あなたはおそらく、MyControlControllerメンバとMyControlActionメンバが、それぞれのモデルがそのコントロールを実装する必要があります。次に、そのパーシャル・ビューにそのインタフェース・タイプを持つ強く型付けされたモデルを持たせます。

+0

を行って取得し、ViewDataをにこれを追加することが最も単純なものであろうと思わする。 – Amir

+0

Craigの答えは私のために働いたが、コントローラの現在のURLをどうやって得ることができるだろうか?私がこれを行うつもりならば、オーバーライドされたonactionexecutingメソッドのビューデータにurlを格納することになり、すべてのアクションメソッドでそれをやり続ける必要はありません。 –

+0

@Ronnie - 現在のコントローラとアクションだけが必要です。コントローラーのアクションメソッドの中にいるときにはわかります:) –

2

ViewContext.RouteData.Values [「アクション」]

それとも似たような仕事が合意

+0

私は設計時の行動を知らない。 –

+0

正しいアクションを見つけるために使用されたrouteDataからアクション値を取得するコールを修正しました。 – AndreasN

関連する問題