MVC下拉列表onchange调用jquery

时间:2013-01-14 11:21:54

标签: javascript jquery asp.net-mvc razor

我有SelectList代表订单的投放类型。

交货类型参考数据具有通常的代码/描述,但还有一个额外的布尔属性,指示是否需要为所选类型输入更多信息。

因此,对于紧急交付,需要额外的数据。如果选择了紧急情况,则其他数据输入字段将设置为可见,否则将隐藏

我的ViewModel包含<List>ReferenceDeliveryTypes,其中包含3个属性。 我已经从ViewModel数据

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

如何在更改传递类型时调用jQuery函数,传递所选代码并检查该代码的Model.ReferenceDeliveryTypes以查看附加数据属性是否为true / false以显示/隐藏其他字段div

我设法调用jQuery函数来传递值。

$(function () {

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

});

2 个答案:

答案 0 :(得分:1)

我不知道您是否可以使用选择列表执行此操作,但我建议使用以下选项:

  • 简单但是黑客 - 在DeliveryTypeDescription的末尾添加一个字符串,例如(紧急递送)并在更改功能中检查
  • 另一个hack - 将DeliveryTypeCode乘以10,如果是紧急交付,则加1(然后在更改函数中使用mod 10)
  • 使用Ajax查找功能
  • 使用需要紧急投放的代码加载JavaScript查找表
  • 在表单中使用隐藏字段,其中包含具有合适分隔符的紧急代码的字符串列表
祝你好运

UPDATE 对于隐藏字段选项,如果您使用123|456|789|之类的内容,然后使用indexOf|附加到所选ID。

答案 1 :(得分:0)

我将Model.ReferenceDeliveryTypes转换为JSON列表,允许我从jQuery访问它。

可能不是最好的方式,但它允许我在客户端上做所有事情,而不是进行AJAX回调。我现在可以显示/隐藏if块内部。

认为值得记录我所做的事情,因为之前我没有遇到@Html.Raw(Json.Encode,这对于想要从jQuery中访问模型数据的人来说可能是有用的。

欢迎任何其他评论。

        <script type="text/javascript">
            var ReferenceDeliveryTypeJsonList=@Html.Raw(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);
            }

        });

    });
});