我有一个模特:
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标志,所有其他字段都为空。
答案 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)
表单仅发布用户可编辑的元素的值。我所知道的唯一例外是一个隐藏的领域。这是一个输入所以也许这不是一个例外。
我会添加隐藏字段来存储您缺少的值。