0

ビューに次のコードがあります。

@using (Html.BeginForm()) {

    <div class="select-box form">
        <p>
            <strong>Select transcript name to view:</strong>
            @Html.DropDownList("license", (SelectList)ViewBag.Licenses, new { onchange = "this.form.submit();" })
        </p>
    </div>
    <div class="select-box form">
        <p>
            <strong>You may have multiple periods for each transcript name:</strong>
            @Html.DropDownList("period", (SelectList)ViewBag.Periods, new { onchange = "this.form.submit();" })
        </p>
    </div>
}

どのドロップダウンがポストバックを引き起こすかに応じて、いくつかのロジックを実装する必要があります。フォームを送信する前に、jQueryによって非表示の入力を追加し、コントロール名の値を設定することを考えていますが、これを行うための「ネイティブ」な方法があるかどうか疑問に思っています。

これは私のコントローラーの署名です:

public ActionResult Checklist(int license, int period) 

前もって感謝します!

4

2 に答える 2

1

ドロップダウンにクラスを適用して、jQueryがそれをセレクター基準として使用できるようにします

 @Html.DropDownList("license", (SelectList)ViewBag.Licenses, new { @class="mySelect"})
 @Html.DropDownList("period", (SelectList)ViewBag.Periods, new { @class="mySelect"})
 <input type="hidden" id="source" name="source" value="" />

そして、スクリプトは

$(function(){

 $(".mySelect").change(function(){
   var itemName=$(this).attr("name");
   $("#source").val(itemName);
    $("form").submit()
 });

});
于 2012-05-16T19:08:28.953 に答える
1

このようなものを使用してください。(ここでは、フォームを送信する代わりにアクションメソッドを呼び出しています)

変更の原因となったドロップダウンのいずれかがゼロ以外の値をアクションメソッドに渡し、もう一方は0を渡します。

 @Html.DropDownList("license", (SelectList)ViewBag.Licenses, new { onchange = "document.location.href = '/ControllerName/Checklist?license=' + this.options[this.selectedIndex].value + '&period=0'" })
 @Html.DropDownList("period", (SelectList)ViewBag.Periods, new { onchange = "document.location.href = '/ControllerName/Checklist?license=0&period=' + this.options[this.selectedIndex].value;" })

お役に立てれば!

于 2014-08-01T13:33:39.123 に答える