MVCビューにドロップダウンリストがあります。ドロップダウンリストの選択の変更時に、コントローラーの特定のアクションメソッドを呼び出します。
私が見たのはこれです:
<%=Html.DropDownList("ddl", ViewData["AvailableList"] as SelectList,
new { onchange = "this.form.action='MyMethod';this.form.submit();" })%>
すべてがコンパイルされています。しかし、ドロップダウンの選択を変更すると、ランタイム例外がスローされます。
「Microsift JScriptランタイムエラー:オブジェクトはプロパティまたはメソッドをサポートしていません」
リスト選択変更イベントで特定のアクションにリダイレクトするにはどうすればよいですか?
このアクションメソッドにパラメーターを渡すにはどうすればよいですか?
あなたのアプローチはうまくいくはずです。発生している問題は、this
イベントでのonchange
の使用が無効であるということです。 this.form
次のようなものを参照します。
<%= Html.DropDownList(
"ddl", ViewData["AvailableList"] as SelectList,
new { onchange = @"
var form = document.forms[0];
form.action='MyMethod';
form.submit();"
} ) %>
本当にフォームを送信する必要がありますか?リダイレクトできます:
onchange = "redirect(this.value)"
ここで、redirect
はカスタム定義の関数です。
function redirect(dropDownValue) {
window.location.href = '/myController/myAction/' + dropDownValue;
}
これはjQueryのことです。それにクラスを与え、それに結び付けます。
Html.DropDownList("ddl", AvailableList, new { @class = "_select_change" })
大まかなスクリプトは次のようになります。
$('._select_change').change(function() { $.post(ctrlUrl); })
両方のように:D
私はミックスを提案します-私はjQueryが大好きです。
$('ddl').change(
function() {
// This contains your selected option val
$(this).val();
// so you can do domething like...
$.post(
$(this).val(),
{ Param1: xxxx,
Param2: xxxx,
Param3: xxxx },
function(data) {
// handle your call here. 'data' contains the response
} );
}