1

我有一个SelectList代表订单的交付类型。

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

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

我的ViewModelcontains<List>ReferenceDeliveryTypes包含 3 个属性。我SelectListItems从 ViewModel 数据创建了一个

@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);
});

});

4

2 回答 2

1

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

  • 简单但有技巧 - 在 DeliveryTypeDescription 的末尾添加一个字符串,例如(紧急交付)并在您的更改函数中检查它
  • 另一个技巧 - 将 DeliveryTypeCode 乘以 10,如果是紧急交付,则加 1(然后在您的更改功能中使用 mod 10)
  • 使用 Ajax 查找函数
  • 加载包含需要紧急交付的代码的 JavaScript 查找表
  • 在您的表单中使用隐藏字段,其中包含带有适当分隔符的紧急代码字符串列表

祝你好运

更新对于隐藏字段选项,如果您使用类似的东西123|456|789|,然后使用indexOf将 a 附加|到所选 ID。

于 2013-01-14T12:53:50.940 回答
1

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

可能不是最好的方法,但它允许我在客户端上做所有事情,而不是进行 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);
            }

        });

    });
});
于 2013-01-14T14:06:16.173 回答