2013-01-14 134 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); 
      } 

     }); 

    }); 
});