【问题标题】:MVC 3 Checkbox failing at model return valueMVC 3 Checkbox 在模型返回值处失败
【发布时间】:2012-02-08 13:18:09
【问题描述】:

我有我的部分观点:

@foreach (var checkbox in Model.TimeLimit)
{
    <div class="editor-label">
    @Html.Label(checkbox.Name)
    @Html.Hidden(checkbox.Id) 
    @Html.CheckBoxFor(c=>checkbox.IsChecked)
    </div>
}

我有一个 ParentViewModel,其中包含:

public IEnumerable<URLTimeLimitViewModel> TimeLimit { get; set; }

并且 URlTimelimitViewmodel 包含:

public string Name { get; set; }
public int Id { get; set; }
public bool IsChecked { get; set; }

当我调用提交按钮时,ParentViewModel中的Timelimit返回null,为什么?

【问题讨论】:

    标签: c# asp.net-mvc asp.net-mvc-3 model-view-controller


    【解决方案1】:

    更好的解决方案是用于 URLTimeLimitViewModel 的 EditorTemplate

    它看起来像这样

    @model URlTimelimitViewModel
    <div class="editor-label">
        @Html.Label(Model.Name)
        @Html.Hidden(Model.Id) 
        @Html.CheckBoxFor(c=>Model.IsChecked)
    </div>
    

    并编写以下代码而不是“foreach”

    @Html.EditorFor(x=> x.TimeLimit)
    

    【讨论】:

      【解决方案2】:

      您需要更改循环 - 模型绑定器无法确定将发布的值绑定到什么:

      @for (var i = 0; i < Model.TimeLimit.Count; i++)
      {
        <div class="editor-label">
          @Html.Label(Model.TimeLimit[i].Name)
          @Html.Hidden(Model.TimeLimit[i].Id) 
          @Html.CheckBoxFor(c=>Model.TimeLimit[i].IsChecked)
        </div>
      }
      

      您还需要将 TimeLimit 属性声明为 IEnumerable 以外的属性,我建议使用通用 List(LINQs ToList 方法非常方便!):

      public List<URlTimelimitViewModel> TimeLimit { get; set; }
      

      【讨论】:

        猜你喜欢
        • 2018-12-08
        • 2017-08-13
        • 1970-01-01
        • 1970-01-01
        • 2013-11-07
        • 2019-01-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多