0

私は過去数日間にいくつかの質問をしましたが、それは広範であったかもしれないのでおそらく答えられませんでした。少し調べてみたら、少し絞り込んだのかもしれません。

BeginフォームのHtml.BeginForm(action、controller、routeValues)オーバーロードを使用してRadioButtonの結果を渡す方法があるかどうか疑問に思っています(つまり、ユーザーが2つの選択肢のいずれかをクリックした)。アクションで処理できるように、その値をクエリ文字列に渡す必要があります。私のアクションは2つのパラメーターを取りますが、これまでのところ、これらの値の1つをアクションに取り込む方法しかわかりません。ここにいくつかのサンプルコードがあります...

<%Html.BeginForm("TemplateInfo","PatientACO",new { PopulationID = ViewData["POPULATIONID"], ActiveAll = "1"});        
%><input type="submit" value="Refresh" id="test" /><%
%></div>
<% Html.EndForm(); %>

ActiveAll属性を自動で魔法のように設定していることに注意してください。動的に設定する必要があります。IE、ユーザーが設定する必要があります。その特定のアクションは2つのパラメーターを取るためです。その動的な価値をその行動に取り入れるための方法を理解する必要がありますか?routeValueディクショナリ、または一般的なroutValuesが、これを実行する方法を理解するのに役立つことを願っています。

これを行う方法について何かアイデアがあれば、私は本当にこれをいただければ幸いです。

アップデート

また、このアクションは他のメソッドやビューによって呼び出されるため、FormCollectionsを受け入れるようにコントローラーを変更したくないことにも言及したいと思います。何か案は?

更新2

さて、もう少し調べてみると、私が理解しようとしているのは、ビューのラジオボタンのフォーム値を取得してRouteValueDictionaryなどに追加するにはどうすればよいかということです...任意のアイデア?

4

1 に答える 1

1

選択した値をクエリ文字列に渡す必要はありません。

ラジオボタンの名前がコントローラーアクションの変数と同じである限り、MVCはフォーム値をアクションの変数にバインドします。

この例では、フォームに、という名前のラジオボタンリストと、およびActionAllの値を持つ2つのラジオボタンがある場合、コントローラーアクションにという名前のブール変数がある場合、ラジオボタンリストの選択結果はコントローラーにバインドされます。アクションのActionAll変数。truefalseActionAll

アップデート

提供した情報に基づいて、アクションメソッドが次のようになっている場合:

[HttpPost]
public ActionResult TemplateInfo(bool ActionAll, ... )

次に、ビューのボタンリストから次のようにActionAll変数を渡すことができます。

<input type="radio" value="true" id="ActionAll" name="ActionAll" /> All
<input type="radio" value="false" selected="selected" id="ActionAll" name="ActionAll" /> Not All

アクションにブレークポイントを設定すると、リストで選択したラジオボタンに基づいてActionAllが設定されていることがわかります。ActionAllがブール値でない場合は、それに応じてリストを調整し、ActionAllにバインドするための正しいタイプの値を渡します。

于 2011-10-31T17:27:35.033 に答える