从MVC3中的DropDownList获取值。比将ID绑定到另一个字段更好的方法?

时间:2012-11-05 23:41:51

标签: c# asp.net-mvc asp.net-mvc-3

我想知道是否有另一种表达以下代码的方法。代码按预期工作,但我在如何定义命名约定方面存在问题。

//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约定似乎不可能有适当的命名约定。有人有同感吗?我还有其他选择吗?

2 个答案:

答案 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