【问题标题】:MVC5 Creating a Form for a complex ClassMVC5 为复杂类创建表单
【发布时间】:2014-07-01 12:46:16
【问题描述】:

我将向我的用户展示一个表格,让他们填写表格以获得一些报价。我想将一系列对象(约 15 个左右)显示为复选框。问题是,我不想在 15 个布尔值中硬编码,我希望它们在每个用户的基础上动态构建。所以我想出的模型的简化版本看起来像这样:

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 中使用前端表单还很陌生,所以我可能只是以错误的方式解决这个问题。有什么建议吗?

【问题讨论】:

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


【解决方案1】:

您正在尝试将模型绑定到列表。实现这一点的最简单方法是将您的视图模型更改为使用IList&lt;Option&gt;,然后执行以下操作:

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

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

【讨论】:

  • 工作就像一个魅力。谢谢!
  • 糟糕,我可能说得太早了。当AdvancedOptions 回发时,他们的Type 属性现在为空。似乎复选框没有保留数据。
  • 你需要一个隐藏的输入来回发@Html.HiddenFor(m =&gt; Model.AdvancedOptions[i].Type)这个类型
猜你喜欢
  • 2018-04-01
  • 1970-01-01
  • 2012-08-28
  • 1970-01-01
  • 2023-03-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多