blu*_*blu 102 asp.net-mvc
我试过这是RC1,然后升级到RC2,但没有解决问题.
// in my controller
ViewData["UserId"] = new SelectList(
users,
"UserId",
"DisplayName",
selectedUserId.Value); // this has a value
Run Code Online (Sandbox Code Playgroud)
result:在对象上设置SelectedValue属性
// in my view
<%=Html.DropDownList("UserId", (SelectList)ViewData["UserId"])%>
Run Code Online (Sandbox Code Playgroud)
结果:所有预期选项都呈现给客户端,但未设置所选属性.SelectedValue中的项目存在于列表中,但列表中的第一项始终默认为选中.
我该怎么做?
更新 感谢John Feminella的回复,我发现了问题所在."UserId"是我的视图强类型化的模型中的属性.当Html.DropDownList("UserId"更改为除"UserId"之外的任何其他名称)时,将正确呈现所选值.
这导致值不受模型约束.
San*_*tos 69
这就是我解决这个问题的方法:
我有以下内容:
控制器:
ViewData["DealerTypes"] = Helper.SetSelectedValue(listOfValues, selectedValue) ;
Run Code Online (Sandbox Code Playgroud)
视图
<%=Html.DropDownList("DealerTypes", ViewData["DealerTypes"] as SelectList)%>
Run Code Online (Sandbox Code Playgroud)
由以下内容更改:
视图
<%=Html.DropDownList("DealerTypesDD", ViewData["DealerTypes"] as SelectList)%>
Run Code Online (Sandbox Code Playgroud)
似乎DropDown必须不具有ViewData名称相同的名称:S很奇怪,但它有效.
Joh*_*lla 50
试试这个:
public class Person {
public int Id { get; set; }
public string Name { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
然后:
var list = new[] {
new Person { Id = 1, Name = "Name1" },
new Person { Id = 2, Name = "Name2" },
new Person { Id = 3, Name = "Name3" }
};
var selectList = new SelectList(list, "Id", "Name", 2);
ViewData["People"] = selectList;
Html.DropDownList("PeopleClass", (SelectList)ViewData["People"])
Run Code Online (Sandbox Code Playgroud)
使用MVC RC2,我得到:
<select id="PeopleClass" name="PeopleClass">
<option value="1">Name1</option>
<option selected="selected" value="2">Name2</option>
<option value="3">Name3</option>
</select>
Run Code Online (Sandbox Code Playgroud)
您仍然可以将DropDown命名为"UserId",并且仍然可以为您正确运行模型绑定.
要使其工作的唯一要求是包含SelectList的ViewData键与要绑定的Model属性的名称不同.在您的具体情况下,这将是:
// in my controller
ViewData["Users"] = new SelectList(
users,
"UserId",
"DisplayName",
selectedUserId.Value); // this has a value
// in my view
<%=Html.DropDownList("UserId", (SelectList)ViewData["Users"])%>
Run Code Online (Sandbox Code Playgroud)
这将生成一个名为UserId的select元素,它与模型中的UserId属性具有相同的名称,因此模型绑定器将使用在Html.DropDownList帮助程序生成的html的select元素中选择的值来设置它.
我不确定为什么当您使用等于属性名称的键将选择列表放在ViewData中时,特定的Html.DropDownList构造函数不会选择SelectList中指定的值.我怀疑它与如何在其他场景中使用DropDownList助手有关,其中约定是在ViewData中有一个与模型中属性同名的SelectList.这将正常工作:
// in my controller
ViewData["UserId"] = new SelectList(
users,
"UserId",
"DisplayName",
selectedUserId.Value); // this has a value
// in my view
<%=Html.DropDownList("UserId")%>
Run Code Online (Sandbox Code Playgroud)