web-dev-qa-db-ja.com

MVCのドロップダウンリスト選択で特定のアクションを呼び出す

MVCビューにドロップダウンリストがあります。ドロップダウンリストの選択の変更時に、コントローラーの特定のアクションメソッドを呼び出します。

私が見たのはこれです:

<%=Html.DropDownList("ddl", ViewData["AvailableList"] as SelectList,
  new { onchange = "this.form.action='MyMethod';this.form.submit();" })%>

すべてがコンパイルされています。しかし、ドロップダウンの選択を変更すると、ランタイム例外がスローされます。

「Microsift JScriptランタイムエラー:オブジェクトはプロパティまたはメソッドをサポートしていません」

リスト選択変更イベントで特定のアクションにリダイレクトするにはどうすればよいですか?
このアクションメソッドにパラメーターを渡すにはどうすればよいですか?

23
Jaqen H'ghar

あなたのアプローチはうまくいくはずです。発生している問題は、thisイベントでのonchangeの使用が無効であるということです。 this.form次のようなものを参照します。

<%= Html.DropDownList(
        "ddl", ViewData["AvailableList"] as SelectList, 
        new { onchange = @"
            var form = document.forms[0]; 
            form.action='MyMethod';
            form.submit();" 
        } ) %>
13
Jacob

本当にフォームを送信する必要がありますか?リダイレクトできます:

onchange = "redirect(this.value)"

ここで、redirectはカスタム定義の関数です。

function redirect(dropDownValue) {
    window.location.href = '/myController/myAction/' + dropDownValue;
}
22
Darin Dimitrov

これはjQueryのことです。それにクラスを与え、それに結び付けます。

Html.DropDownList("ddl", AvailableList, new { @class = "_select_change" })

大まかなスクリプトは次のようになります。

$('._select_change').change(function() { $.post(ctrlUrl); })
6
ziya

両方のように: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
    } );
}
2
SDReyes