2013-01-14 71 views
1

我有一個SelectList代表一個訂單的交貨類型。MVC下拉列表onchange調用jquery

交付類型參考數據具有通常的代碼/描述,但還有一個額外的布爾屬性,用於指示是否需要爲所選類型輸入更多信息。

因此,對於緊急交付,需要額外的數據。如果選擇了緊急情況,則額外的數據輸入字段將被設置爲可見的,否則將被隱藏

我的ViewModel包含<List>ReferenceDeliveryTypes它包含3個屬性。 我創建從視圖模型數據SelectListItems

@Html.DropDownListFor(model => model.DeliveryTypeCode, 
    new SelectList(Model.ReferenceDeliveryTypes as System.Collections.IEnumerable, 
     "DeliveryTypeCode", "DeliveryTypeDescription"), new { id = "ddlDeliveryType" }) 

我如何可以調用交貨類型的變化的jQuery的功能,通過選擇的代碼,並檢查Model.ReferenceDeliveryTypes的代碼,看看是否額外的數據屬性真/假顯示/隱藏附加字段div

我設法得到調用的jQuery函數來傳遞值。

$(function() { 

$('#ddlDeliveryType').change(function() { 
    var value = $(this).val(); 
    alert(value); 
}); 

});

回答

1

我不知道的任何方式,您可以使用選擇列表中這樣做,但我建議以下選項:

  • 簡單,但一個黑客 - 一個字符串添加到DeliveryTypeDescription結束,例如(緊急交付)和檢查,在你改變功能
  • 另劈 - 乘以10 DeliveryTypeCode和如果它是一個緊急交付加1(然後在您更改功能使用MOD 10)
  • 使用一個Ajax查詢功能
  • 負載與需要緊急交付
  • 使用表單中的隱藏字段,它包含緊急代碼的字符串列表用合適的分離

好運

更新代碼的JavaScript的查找表 如果您使用類似123|456|789|之類的東西,則使用隱藏字段選項,然後使用indexOf|附加到所選ID。

+0

隱藏的字段可能是最簡單的。我也在考慮使用@Html.Raw將Model.ReferenceDeliveryTypes作爲JSON序列化(Json.Encode(Model.ReferenceDeliveryTypes)然後我可以在jQuery中使用它,儘管如此,我還沒有管理它。 – MartinS

0

我將Model.ReferenceDeliveryTypes轉換爲允許我從jQuery訪問的JSON列表。

可能不是最好的方法,但它允許我在客戶端上做所有事情,而不是進行AJAX回調。我現在可以顯示/隱藏if塊的內部。

認爲它值得記錄我做了什麼,因爲我之前沒有遇到過@Html.Raw(Json.Encode,它可能證明對於想要從jQuery中訪問模型數據的人有用。

歡迎任何其他意見。

 <script type="text/javascript"> 
      var [email protected](Json.Encode(Model.ReferenceDeliveryTypes)) 
     </script> 



     @Html.DropDownListFor(model => model.DeliveryTypeCode, 
       new SelectList(Model.ReferenceDeliveryTypes.ReferenceDeliveryType as System.Collections.IEnumerable, 
       "DeliveryTypeCode", "DeliveryTypeDescription"), new { id = "ddlDeliveryType" }) 



$(function() { 

    $('#ddlDeliveryType').change(function() { 

     var selectedDT= $(this).val(); 

     $.each(ReferenceDeliveryTypeJsonList, function (index, item) { 

      if (selectedDT === item.DeliveryTypeCode) { 
       alert("match " + selectedDT); 
      } 

     }); 

    }); 
});