从CheckBoxFor中获取已检查的值

时间:2016-04-26 18:00:27

标签: asp.net asp.net-mvc

我有一个模特:

public class SectionModel
{
    public int SectionId { get; set; }
    public string Name { get; set; }
    // used for checkbox
    public bool IsChecked { get; set; }
}

返回一个列表并在视图上设置为复选框,使用:

<div id="TestSections">
  @for (int i = 0; i < Model.Count; i++)
  {
      <div class="form-group">
        <label class="col-md-2 control-label">
            @Model[i].Name
        </label>
        <div class="md-checkbox-list col-md-10">
           <div>
                @Html.CheckBoxFor(m => m[i].IsChecked, new { @SectionId = Model[i].SectionId })
           </div>
        </div>
       </div>
   }
   </div>

然后提交一个动作方法:

public ActionResult ExamSection(List<SectionModel> model)
{
    var checkedSections = model.FindAll(x => x.IsChecked);
}

checkedSections向我返回已检查的正确数字,但我需要其他详细信息,例如已检查其SectionId。有没有办法检索它?当我检查传入的模型时,它只设置了IsChecked标志,所有其他字段都为空。

3 个答案:

答案 0 :(得分:3)

使用HiddenFor()(和/或名称)添加SectionID。发布时,模型将具有该字段的值:

  @for (int i = 0; i < Model.Count; i++)
  {
     <div class="form-group">
        <div class="row">
           <label class="col-md-2 control-label">
              @Model[i].Name
           </label>
           <div class="md-checkbox-list col-md-10">
              <div>
                 @Html.HiddenFor(m => m[i].SectionId)
                 @Html.CheckBoxFor(m => m[i].IsChecked)
              </div>
           </div>
        </div>
     </div>
  }

答案 1 :(得分:3)

您应该做的是将HiddenField添加到复选框,如下所示:

       <div>
            @Html.CheckBoxFor(m => m[i].IsChecked)
            @Html.HiddenFor(m =>m[i].SectionId)
       </div>

然后当它发布到Controller时,您将同时拥有IsChecked值和SectionId

答案 2 :(得分:1)

表单仅发布用户可编辑的元素的值。我所知道的唯一例外是一个隐藏的领域。这是一个输入所以也许这不是一个例外。

我会添加隐藏字段来存储您缺少的值。