我想知道是否有另一种表达以下代码的方法。代码按预期工作,但我在如何定义命名约定方面存在问题。
//Model.cs:
[DisplayName("Device Manufacturer")]
public List<KeyValuePair<int, string>> DeviceManufacturer { get; set; }
public int SelectedManufacturerID { get; set; }
//Model.ascx:
<%= Html.DropDownListFor(model => model.SelectedManufacturerID, new SelectList(Model.DeviceManufacturer, "Key", "Value"))%>
现在,每当更改所选列表项时,新值将存储在SelectedManufacturerID中。我可以像我这样在控制器中接收值:
int selectedID = model.SelectedDataCenterID;
然而,我不满意MVC在不是ID字段时为我的选择列表提供ID“SelectedManufacturerID”这一事实 - 它是一个选择列表。显然,这是为了支持绑定到SelectedManufacturerID字段。
如果我希望使用我的选择列表客户端,我现在有代码,如:
$('#SelectedManufacturerID').change(function(){
console.log("OnSelectedIndexChanged!");
});
这个jQuery非常不清楚。没有迹象表明SelectedManufacturerID是一个选择DOM元素。使用本文顶部的MVC约定似乎不可能有适当的命名约定。有人有同感吗?我还有其他选择吗?
答案 0 :(得分:2)
如果需要,可以使用其他overload DropDownListFor
辅助方法更新下拉列表的ID或其他html属性。在这里,您可以传递html属性作为最后一个参数。
<%= Html.DropDownListFor(model => model.SelectedManufacturerID,
new SelectList(Model.DeviceManufacturer, "Key", "Value"),
new { @id="ManufacturerList"})%>
答案 1 :(得分:1)
改为使用select#SelectedManufacturerID
。