Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 传递选择列表模型中的选定值_C#_Asp.net Mvc - Fatal编程技术网

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);