在模型列表(MVC)中设置复选框值

本文关键字:设置 复选框 MVC 模型 列表 | 更新日期: 2023-09-27 18:14:45

我在MVC中有以下内容:

影响范围:

    @for (int i = 0; i < Model.ImpactAreas.Count; i++)
    {
        @Html.HiddenFor(m => m.ImpactAreas[i].ImpactAreaID)
        @Html.HiddenFor(m => m.ImpactAreas[i].Name)
        @Html.HiddenFor(m => m.ImpactAreas[i].Description)
        @Html.HiddenFor(m => m.ImpactAreas[i].IsActive)
        @Html.HiddenFor(m => m.ImpactAreas[i].ConcurrencyDateTime)
        @Html.HiddenFor(m => m.ImpactAreas[i].InsertedDateTime)
        @Html.HiddenFor(m => m.ImpactAreas[i].Checked)
    }
    @foreach (var area in Model.ImpactAreas)
    {
        CurrentImpactArea = area.Name;
        string myImpactAreaName = "ImpactArea" + CurrentImpactArea;
        <div class="columns large-2 medium-3 small-4">
         <input type="checkbox" @area.Checked name="@myImpactAreaName" value="@area.ImpactAreaID" @(area.ImpactAreaID == Model.ImpactAreaID ? " checked='checked'" : "") /><label title="@area.Description" for="ImpactAreaID">@area.Name</label>
        </div>
    }
</div>

我试图让复选框设置列表项中的值与复选框在影响区域对象中的选中状态(true/false):

public bool Checked {  get; set; }

但是在我的主对象中,我有一个上面对象的列表

帮忙吗?

在模型列表(MVC)中设置复选框值

你第一个for循环是正确地为你的模型生成表单控件,但是你有隐藏的输入Checked属性渲染属性的初始值,它的值将被绑定当你提交表单(你只是发送回原始数据你发送到视图。

您的第二个foreach循环正在生成与您的模型没有关系的表单控件,并且不会绑定到您的模型(请参阅此答案,了解为什么使用foreach循环不起作用)

此外,通过渲染所有隐藏的输入并将它们全部原原本本地发送回来,您将降低性能。使用一个视图模型只包含2个属性- ImpactAreaIDChecked,当你提交表单,从数据库中获取记录基于ID属性,更新记录Checked属性基于视图模型并保存它(参考什么是MVC中的ViewModel ?)。

你的视图代码只需要是

@for (int i = 0; i < Model.ImpactAreas.Count; i++)
{
    @Html.HiddenFor(m => m.ImpactAreas[i].ImpactAreaID)
    @Html.CheckBoxFor(m => m.ImpactAreas[i].Checked)
    // assumes you want the Name value to be used as the label for the checkbox
    @Html.LabelFor(m => m.ImpactAreas[i].Checked, Model.ImpactAreas[i].Name)
}

try this

<input type="checkbox" name="@Model.name" id="@Model.name" @(Model.Checked ? "checked" : "") />