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

时间:2016-10-25 13:22:23

标签: c# asp.net-mvc checkbox

我在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; }

然而在我的主要对象中,我有一个上面的对象列表

任何帮助?

2 个答案:

答案 0 :(得分:1)

您首先for循环正确生成模型的表单控件,但您有Checked属性的隐藏输入,该属性呈现属性的初始值,并且该值将是提交表单时绑定(您只需将发送的原始数据发送回视图。

您的第二个foreach循环正在生成与您的模型没有关系且不会绑定到您的模型的表单控件(有关使用foreach循环的原因的详细信息,请参阅this answer不工作)

此外,通过呈现所有隐藏的输入并将它们全部重新发送回来,您的性能降低。使用仅包含2个属性的视图模型 - ImpactAreaIDChecked,当您提交表单时,根据ID属性从数据库中获取记录,根据更新记录Checked属性视图模型并保存(参考What is ViewModel in MVC?)。

您的观看代码只需

@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)
}

答案 1 :(得分:0)

试试这个

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