Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.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 Core - Fatal编程技术网

C# 提交表单时,复选框列表将丢失

C# 提交表单时,复选框列表将丢失,c#,asp.net-core,C#,Asp.net Core,我为员工及其角色提供了以下视图模型: public class EmployeeViewModel { public int Id { get; set; } // some more properties public List<EmployeeRoleViewModel> EmployeeRoles { get; set; } } public class EmployeeRoleViewModel { public int Id { get;

我为员工及其角色提供了以下视图模型:

public class EmployeeViewModel
{
    public int Id { get; set; }
    // some more properties
    public List<EmployeeRoleViewModel> EmployeeRoles { get; set; }
}

public class EmployeeRoleViewModel
{
    public int Id { get; set; }
    public int EmployeeId { get; set; }
    public int RoleId { get; set; }
    public string Title { get; set; }
    public bool Selected { get; set; }
}
公共类EmployeeViewModel
{
公共int Id{get;set;}
//更多属性
公共列表EmployeeRoles{get;set;}
}
公共类EmployeeRoleViewModel
{
公共int Id{get;set;}
public int EmployeeId{get;set;}
public int RoleId{get;set;}
公共字符串标题{get;set;}
已选择公共布尔值{get;set;}
}
我在编辑视图中显示如下复选框:

@for (int i = 0; i < Model.EmployeeRoles.Count(); i++)
{
<label>
    <input type="checkbox" asp-for="@Model.EmployeeRoles[i].Selected" />
    @Model.EmployeeRoles[i].Title
</label>
}
for(int i=0;i 这将为选中的复选框生成此HTML:

<input type="checkbox" checked="checked" 
    id="EmployeeRoles_0__Selected" 
    name="EmployeeRoles[0].Selected" value="true" />

。。。这是一个未经检查的:

<input type="checkbox" 
    id="EmployeeRoles_2__Selected" 
    name="EmployeeRoles[2].Selected" value="true" />

所有复选框都被正确渲染,所有右侧框上都有复选标记

该表单将发布到此控制器方法(为简洁起见简化):

[HttpPost]
公共异步任务编辑(int-id,[Bind(“id,EmployeeRoles”)]Employee-Employee)
{
数据库更新(员工);
等待db.saveChangesSync();
返回重定向操作(“详细信息”、“分支”);
}

问题在于
employee.EmployeeRoles
是一个长度为0的列表,即使选中了几个复选框。我做错了什么?

输入字段的
名称

name=“Employee.EmployeeRoles[index]。选中“


为了将
EmployeeRoles[index]
绑定到
EmployeeRoles
对象内的
EmployeeRoles
列表。

请首先确认您在视图和操作功能中使用的视图模型相同。可以添加隐藏的输入字段以帮助绑定属性:

@for (int i = 0; i < Model.EmployeeRoles.Count(); i++)
{
    <label>
        <input type="checkbox" asp-for="@Model.EmployeeRoles[i].Selected" />
        @Model.EmployeeRoles[i].Title
    </label>

    <input type="hidden" asp-for="@Model.EmployeeRoles[i].Id" />
    <input type="hidden" asp-for="@Model.EmployeeRoles[i].Title" />
}
for(int i=0;i 然后在控制器上,您可以获得以下列表:

然后检查
Selected
属性以确认是否选择了当前角色

@for (int i = 0; i < Model.EmployeeRoles.Count(); i++)
{
    <label>
        <input type="checkbox" asp-for="@Model.EmployeeRoles[i].Selected" />
        @Model.EmployeeRoles[i].Title
    </label>

    <input type="hidden" asp-for="@Model.EmployeeRoles[i].Id" />
    <input type="hidden" asp-for="@Model.EmployeeRoles[i].Title" />
}