我创建了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函数来处理所有这些。这该怎么做?或者还有其他方法可以实现这一目标吗?感谢。
答案 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中的顺序正确。