如何在MVC中为DropDownList添加事件处理程序

时间:2014-12-28 22:47:25

标签: jquery asp.net-mvc

我创建了2个级联的DropDownLists,如下所示,

<%: Html.DropDownListFor(model => model.SourceType, new SelectList(Model.SourceTypes, "Value", "Text", Model.SourceType))%>

<%: Html.DropDownListFor(model => model.Supplier, new SelectList(Model.Suppliers, "Value", "Text", Model.Supplier))%>

    <script type="text/javascript">
        $('#SourceType').change(function () {
            var sourceType = $(this).val();
            var supplierSelect = $('#Supplier');
...

工作正常。问题是我需要在一个视图上有很多这样的DropDownListFor对,并且我必须创建相同数量的jquery .change函数作为DropDownListFor对,因为每个.change函数都需要唯一的id。我认为应该有一种方法可以为每个DropDownList添加更改事件处理程序,以便只有一个jquery函数来处理所有这些。这该怎么做?或者还有其他方法可以实现这一目标吗?感谢。

1 个答案:

答案 0 :(得分:2)

嗯,首先,如果你的集合已经是SelectListItem的集合(你的集合似乎是),那么你就不需要SelectList。就这样做:

<%: Html.DropDownListFor(model => model.Supplier, Model.Suppliers) %>

虽然很容易在不引用唯一ID的情况下选择下拉菜单,但问题在于您是根据这些单独的项目创建特定的变量名称。你还没有真正说过如何使用这些变量,因此很难确切地知道你想要什么......但是这样的事情可能有用。

你可以做这样的事情,但它依赖于供应商是dom树中的下一个兄弟元素。如果不是,你可能会想出某种适合你的模式。:

<%: Html.DropDownListFor(model => model.SourceType, Model.SourceTypes, new {@class = 'source_type'})%>
<%: Html.DropDownListFor(model => model.Supplier, Model.Suppliers, new {@class = 'supplier'})%>

<script type="text/javascript">
    $('select.source_type').change(function () {
        var sourceType = $(this).val();
        var supplierSelect = $(this).next('select.supplier');
    });
</script>

或者,您也可以获取source_type类和供应商类的集合,通过索引循环它们并再次分配它们,假设它们在dom中的顺序正确。