我试过这是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"之外的任何其他名称)时,将正确呈现所选值.
这导致值不受模型约束.
这是我的情况 -
我有两个嵌套视图模型:
<%=Html.EditorFor(x => x.DisplayEntitiesWithRadioboxesViewModel)%><br />它位于其父级 (StructureViewModel) 中,我可以轻松填充嵌套的 ViewModel 并将其传递到主视图:
在控制器内 - 示例
var moveDepartment = new StructureViewModel();
moveDepartment.DisplayEntitiesWithRadioboxesViewModel = fullDepartmentList.Select(x => new DisplayEntityViewModel
{
Id = x.Id,
Path = x.Path,
PathLevel = x.PathLevel,
Description = x.Description,
});
return View(moveDepartment);
Run Code Online (Sandbox Code Playgroud)
EditorTemplete - 示例
<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<IEnumerable<Site.Areas.Administration.ViewModel.DisplayEntityViewModel>>" %>
<table class="aligncenter"><%
if (Model != null)
{
foreach (var entity in Model)
{%>
<tr class="tRow">
<td style="text-align:left; text-indent:<%=Html.Encode(entity.PathLevel)%>em">
<%=Html.Encode(entity.Description)%>
<%=Html.RadioButton("radiobutton",entity.Id)%>
</td>
</tr><%
}
}%>
</table>
namespace Site.Areas.Administration.ViewModel
{
public class …Run Code Online (Sandbox Code Playgroud)