在模型中传递选择列表选择的值

时间:2014-01-28 18:00:11

标签: 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.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" />
        }

C#行动方法

public ActionResult edit(Emp emp)
{
      if (ModelState.IsValid) // <-- always returning false
      {
          // Model.Role getting null, why ?
      }
}

要填充selectList

的下拉列表
ViewBag.roles = new SelectList(dbContext.Roles, "roleid", "rolename", SelectedRole);

现在编辑方法emp模型包含empidname,但role获得null,有什么想法吗?

3 个答案:

答案 0 :(得分:1)

可能原因在于,模型绑定器无法绑定模型中包含的复杂类型。您可以通过在Emp模型中使用RoleId字段然后将下拉列表绑定到该RoleId来使其工作。

或者您可以使用编辑器模板来实现预期的功能。

答案 1 :(得分:0)

实际上没有什么可以告诉它如何从帖子背面的所选角色的值创建一个Role对象。此外,在创建视图时,它也不知道要使用哪个Role对象属性来选择下拉列表中的项目。

因此,简而言之,您应该将下拉列表绑定到string类型的属性而不是用户定义的类型。

答案 2 :(得分:0)

我认为应该是

ViewBag.roles = new SelectList(dbContext.Roles, "id", "rolename", SelectedRole);

“id”而不是“roleid”