MVC5为复杂类创建表单

时间:2014-07-01 12:46:16

标签: c# asp.net-mvc forms asp.net-mvc-5

我将向用户提交一份表格,填写表格以获得一些报价。将要显示一系列对象(约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中使用前端表单时非常新,所以我可能只是以错误的方式处理这个问题。有什么建议吗?

1 个答案:

答案 0 :(得分:2)

您正在尝试将绑定建模到列表。实现此目的的最简单方法是将视图模型更改为使用IList<Option>,然后执行以下操作:

@for(var i = 0; i < Model.AdvancedOptions.Count; i++)
{
    @Html.CheckBoxFor(m => Model.AdvancedOptions[i].Selected)
}

有关更多信息,请参阅Phil Haacks post有关绑定到集合的信息