Asp.net mvc 3 永远不会设置selectedValue的HTML.SelectListFor

Asp.net mvc 3 永远不会设置selectedValue的HTML.SelectListFor,asp.net-mvc-3,razor,Asp.net Mvc 3,Razor,我有以下显示下拉列表的局部视图: 我在页面上呈现它,如下所示: 对于每个截面对象,局部视图渲染一次。我已经创建了一个截面对象,可以在jquery对话框中进行编辑,可以更改名称、显示顺序、停靠模板列等 在我正在使用的测试页面上,此分区对话框呈现四次,因为父对象中有四次 问题是: *下拉列表中的SelectedValue永远不会被设置*-也就是说,当对话框显示时,下拉列表中的正确项永远不会被选择,我不太明白为什么 我想这可能是因为下拉列表渲染了四次,所以我尝试只渲染其中一个“部分”,但仍然存在相同的

我有以下显示下拉列表的局部视图:

我在页面上呈现它,如下所示:

对于每个截面对象,局部视图渲染一次。我已经创建了一个截面对象,可以在jquery对话框中进行编辑,可以更改名称、显示顺序、停靠模板列等

在我正在使用的测试页面上,此分区对话框呈现四次,因为父对象中有四次

问题是: *下拉列表中的SelectedValue永远不会被设置*-也就是说,当对话框显示时,下拉列表中的正确项永远不会被选择,我不太明白为什么

我想这可能是因为下拉列表渲染了四次,所以我尝试只渲染其中一个“部分”,但仍然存在相同的问题

有人知道我能做什么吗

***编辑 不知道我是不是在用一种糟糕的方式做。我曾想过只使用jquery和json构建一次对话框,但我更喜欢这样做,因为它感觉更干净。

我这样做:

在控制器动作编辑中,例如:

ViewData["ProvinceID"] = new SelectList(dc.Provinces.OrderBy(p => p.NameAr), "ID", "NameAr", factory.ProvinceID);
和标记:

<%: Html.DropDownList("ProvinceID") %>
看到了吗?这是一个工厂列表,它有一个省域,我想让你注意的是SelectList构造函数中的第四个参数,我传递了factory.ProvinceID,所以DropDownList知道要设置哪个选项。否则,DropDownList将显示第一个默认值

附言:你的工作就是改变你的语法;我不用它


希望能有帮助。

Doh。。。修正-完全是我自己的错

我已经像这样设置了我的html.dropdownlist @Html.DropDownListForx=>x.Name

本来应该是这样的: @Html.DropDownListForx=>x.DockTemplateColumn.Id

将第一个参数设置为x=>x.DockTemplateColumn.Id,它可以唯一地标识我列表中的项目,而不是x.Name。这个问题马上得到了解决

我只是想把它贴在这里,以防有人犯我犯的同样的错误

编辑 在这里找到了答案:

我有一种感觉,有人可能会说在控制器中执行,我知道这很可能解决问题。因为我的对象模型具有下拉完整列表和选定项所需的一切,所以我不需要通过控制器填充它。我在构建主视图时构建部分视图,包括下拉列表。谢谢你。
ViewData["ProvinceID"] = new SelectList(dc.Provinces.OrderBy(p => p.NameAr), "ID", "NameAr", factory.ProvinceID);
<%: Html.DropDownList("ProvinceID") %>