【问题标题】:Model binding for Checkboxes复选框的模型绑定
【发布时间】:2015-03-02 19:08:28
【问题描述】:

我正在尝试将一些复选框绑定到模型,但我得到空值。

所以基本上,我有指定列表:用户可以检查或不检查的可能性。有id名称和描述(用户在UI中使用的名称和描述,以及知道选择的id的id) 模型应该将选定的值绑定到“指定”字段,可以将 id 保存为列表。

这是我制作选择框的方法:

@foreach (var item in Model.designationList)
                {
                    <label>
                        @Html.CheckBox("CheckBoxName", new { id = "designation" + item.id, value = item.id }) @item.name: <span style="font-weight:lighter">@item.description</span>
                    </label>
                    <br />
                }

这是我们感兴趣的模型部分:

        [Required]
        public List<IncidentDesignation> designationList { get; set; }
        [Required]
        public List<int> designation { get; set; }

这是子对象:

public class IncidentDesignation
    {
        public int id { get; set; }
        public string name { get; set; }
        public string description { get; set; }
    }

最后,这是生成的 Html:

<div class="col-md-10">
   <label>
   <input id="designation1" name="CheckBoxName" type="checkbox" value="1"><input name="CheckBoxName" type="hidden" value="false"> Acte dangereux: <span style="font-weight:lighter">action qui met en danger une ou plusieurs personnes</span>
   </label>
   <br>
   <label>
   <input id="designation2" name="CheckBoxName" type="checkbox" value="2"><input name="CheckBoxName" type="hidden" value="false"> Situation dangereuse: <span style="font-weight:lighter">situation qui tôt ou tard, conduit à blesser des personnes ou causer des dégâts matériels importants</span>
   </label>
   <br>
   <label>
   <input id="designation3" name="CheckBoxName" type="checkbox" value="3"><input name="CheckBoxName" type="hidden" value="false"> Presqu'accident: <span style="font-weight:lighter">évènement qui aurait pu causer un accident de travail avec ou sans dégâts matériels</span>
   </label>
   <br>
   <label>
   <input id="designation4" name="CheckBoxName" type="checkbox" value="4"><input name="CheckBoxName" type="hidden" value="false"> Accident: <span style="font-weight:lighter">événement avec dommages corporels</span>
   </label>
   <br>
   <label>
   <input id="designation5" name="CheckBoxName" type="checkbox" value="5"><input name="CheckBoxName" type="hidden" value="false"> Environnement: <span style="font-weight:lighter">situation qui risque d'engendrer un impact</span>
   </label>
   <br>
   <label>
   <input id="designation6" name="CheckBoxName" type="checkbox" value="6"><input name="CheckBoxName" type="hidden" value="false"> Incendie: <span style="font-weight:lighter">incendie ayant nécéssité une intervention afin de l'éteindre</span>
   </label>
   <br>
   <span class="text-danger field-validation-valid" data-valmsg-for="incidentDate" data-valmsg-replace="true"></span>
</div>

提前感谢帮助我

编辑:

在测试中添加当前控制器:

[HttpPost]
        public ActionResult Create(IncidentViewModel model)
        {
            if (ModelState.IsValid)
            { 
                // add record in db and retrieve IncidentId
                // Go to Add pictures with provided ID
            }
            return RedirectToAction("Create");
        }

我在 if 语句断点时看到空值。

【问题讨论】:

标签: asp.net-mvc asp.net-mvc-4 asp-classic asp.net-mvc-5 model-binding


【解决方案1】:

像下面这样使用

@foreach (var item in Model.designationList)
{
    <label>
        <input type="checkbox" value="@item.id" name="CheckBoxName" id = "designation" + @item.id />@item.name: <span style="font-weight:lighter">@item.description</span>
    </label>
    <br />
}

【讨论】:

  • 在哪个操作上将复选框值发布到控制器。请让我知道控制器,以及您使用的标签的视图代码通过值
  • 表格的一侧有很多同名的复选框。我认为这可能会导致问题。请为此做一些事情
  • 使用 @item.name 谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-03-06
  • 2014-08-18
  • 1970-01-01
  • 2011-12-24
  • 2011-03-15
  • 2014-05-15
  • 2023-04-03
相关资源
最近更新 更多