我将向用户提交一份表格,填写表格以获得一些报价。将要显示一系列对象(约15个左右)作为复选框。问题是,我不想在15个bool中进行硬编码,我希望它们是基于每个用户动态构建的。因此,我提出的模型的简化版本看起来像这样:
public class InqueryViewModel
{
public string Origin { get; set; }
public string Destination { get; set; }
public decimal Weight { get; set; }
public IEnumerable<Option> AdvancedOptions { get; set; }
}
public class Option
{
public bool Selected { get; set; }
public string Type { get; set; }
}
问题是,我无法弄清楚如何绑定AdvancedOptions。我试过这个:
@foreach (var option in Model.AdvancedOptions)
{
<div class="col-xs-4">
<div class="col-xs-1">
@Html.CheckBoxFor(x => option.Selected)
</div>
<div class="col-xs-2">
@option.Type
</div>
<div class="col-xs-1"></div>
</div>
}
但这并不奏效。我试图在MVC中使用前端表单时非常新,所以我可能只是以错误的方式处理这个问题。有什么建议吗?
答案 0 :(得分:2)
您正在尝试将绑定建模到列表。实现此目的的最简单方法是将视图模型更改为使用IList<Option>
,然后执行以下操作:
@for(var i = 0; i < Model.AdvancedOptions.Count; i++)
{
@Html.CheckBoxFor(m => Model.AdvancedOptions[i].Selected)
}
有关更多信息,请参阅Phil Haacks post有关绑定到集合的信息