C# 传递选择列表模型中的选定值
我有下面的模型课C# 传递选择列表模型中的选定值,c#,asp.net-mvc,C#,Asp.net Mvc,我有下面的模型课 class Emp { int id { get; set; } string name { get; set; } Role role { get; set; } } class Role { int id { get; set; } string rolename { get; set; } } 下面是我执行更新实体的表单 .aspx @using(@Html.BeginForm("edit", "Home", FormMethod
class Emp
{
int id { get; set; }
string name { get; set; }
Role role { get; set; }
}
class Role
{
int id { get; set; }
string rolename { get; set; }
}
下面是我执行更新实体的表单.aspx
@using(@Html.BeginForm("edit", "Home", FormMethod.Post)){
<label>name: </label>@Html.TextBoxFor(m => m.Name)<br />
<label>role: </label>@Html.DropDownListFor(m => m.Role, (SelectList)ViewBag.roles)
@Html.Hidden("empid", Model.EmpId)
<input type="submit" value="submit" />
}
要填充下拉列表,请选择列表
ViewBag.roles = new SelectList(dbContext.Roles, "roleid", "rolename", SelectedRole);
现在在编辑方法
emp
中,模型包含empid
和name
,但是role
获取null
,你知道吗 原因可能是,模型绑定器无法绑定模型中包含的复杂类型。您可以通过在Emp模型中有一个RoleId字段,然后将下拉列表绑定到该RoleId来实现这一点
或者,您可以使用编辑器模板来实现预期的功能。实际上没有任何东西可以告诉它如何从回发上所选角色的值创建角色对象。此外,在创建视图时,它也不知道要使用角色对象的哪个属性在下拉列表中选择项目 因此,简而言之,您应该将下拉列表绑定到string类型的属性,而不是用户定义的类型。I thinkit应该是
ViewBag.roles = new SelectList(dbContext.Roles, "id", "rolename", SelectedRole);
“id”而不是“roleid”
ViewBag.roles = new SelectList(dbContext.Roles, "id", "rolename", SelectedRole);