【问题标题】:Implementing checkbox list from list in ASP.NET Core从 ASP.NET Core 的列表中实现复选框列表
【发布时间】:2018-05-09 05:18:21
【问题描述】:

我已经看过有关该主题的其他主题,但我认为我认为正确的语法/设置有问题。最终,控制器在从编辑返回时无法看到角色列表的内容。

查看

@model Models.Volunteer

            @foreach (var item in Model.Roles)
            {
                <input type="checkbox" asp-for="@item.Selected" />
                <label asp-for="@item.Selected">@item.RoleName</label>
                <input type="hidden" asp-for="@item.RoleId" />
                <input type="hidden" asp-for="@item.RoleName" />
                <br />
            }

<input type="submit" value="Save" class="btn btn-default" />

型号

public abstract class BaseVolunteer
{
    [Key]
    public int Recno { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public string Email { get; set; }
    public string City { get; set; }
    [NotMapped]
    [Display(Name = "Roles")]
    public List<Role> Roles { get; set; }
}

public class Role
{
    [Key]
    public String RoleId { get; set; }
    public String RoleName { get; set; }

    public bool Selected { get; set; }
}

控制器

    [HttpPost]
    [ValidateAntiForgeryToken]
    public async Task<IActionResult> Edit(int id, [Bind("Recno,FirstName,LastName,Email,City,Roles")] Volunteer volunteer)
    {
}

控制器中的志愿者对象正确返回其他值...但 Roles 对象为 NULL,尽管已正确填充以供显示。

【问题讨论】:

    标签: asp.net-core checkboxlist


    【解决方案1】:

    您需要使用数组索引器,以便模型绑定器知道每个项目的索引:

    @for( Int32 i = 0; i < this.Model.Roles.Length; i++ ) {
        <input type="checkbox" asp-for="@Model.Roles[i].Selected" />
        <label asp-for="@Model.Roles[i].Selected">@Model.Roles[i].RoleName</label>
        <input type="hidden" asp-for="@Model.Roles[i].RoleId" />
        <input type="hidden" asp-for="@Model.Roles[i].RoleName" />
        <br />
    } 
    

    这将被渲染成这样的:

        <input type="checkbox" name="Roles[0].Selected" value="false" id="Roles_0__Selected" />
        <label for="Roles_0__Selected">Admin</label>
        <input type="hidden" name="Roles[0].RoleId" value="10" />
        <input type="hidden" name="Roles[0].RoleName" value="Admin" />
        <br />
    
        <input type="checkbox" name="Roles[1].Selected" value="false" id="Roles_1__Selected" />
        <label for="Roles_1__Selected">Users</label>
        <input type="hidden" name="Roles[1].RoleId" value="120" />
        <input type="hidden" name="Roles[1].RoleName" value="Users" />
        <br />
    
        <input type="checkbox" name="Roles[2].Selected" value="false" id="Roles_2__Selected" />
        <label for="Roles_2__Selected">Guests</label>
        <input type="hidden" name="Roles[2].RoleId" value="123" />
        <input type="hidden" name="Roles[2].RoleName" value="Guestsd />
        <br />
    

    注意name="" 值如何包含模型绑定器可以使用的索引。

    【讨论】:

    • 谢谢!我显然是 .NET 核心的新手……但这让我想知道,如果模型绑定器无法正确识别,它们为什么支持 foreach 语法。
    猜你喜欢
    • 2017-03-26
    • 2011-01-23
    • 1970-01-01
    • 1970-01-01
    • 2011-09-07
    • 2012-11-05
    • 1970-01-01
    • 1970-01-01
    • 2017-12-17
    相关资源
    最近更新 更多