0

我想知道是否有另一种方式来表达以下代码。该代码按预期工作,但我对它如何定义我的命名约定有疑问。

//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“SelectedManufacturerID”这一事实感到不满意,因为它不是一个 ID 字段——它是一个选择列表。显然,这是为了支持绑定到 SelectedManufacturerID 字段。

如果我希望使用我的选择列表客户端,我现在有如下代码:

$('#SelectedManufacturerID').change(function(){
    console.log("OnSelectedIndexChanged!");
});

这个jQuery非常不清楚。没有迹象表明 SelectedManufacturerID 是一个选择 DOM 元素。使用本文顶部的 MVC 约定似乎不可能有正确的命名约定。有人有同感吗?我还有其他选择吗?

4

2 回答 2

2

如果需要,您可以使用不同的辅助方法重载来更新下拉列表的 ID 或其他 html 属性。DropDownListFor在这里,您可以将 html 属性作为最后一个参数传递。

<%= Html.DropDownListFor(model => model.SelectedManufacturerID,
             new SelectList(Model.DeviceManufacturer, "Key", "Value"),
                                          new { @id="ManufacturerList"})%>
于 2012-11-05T23:52:55.643 回答
1

改为使用select#SelectedManufacturerID

于 2012-11-05T23:52:44.910 回答