【问题标题】:Null error when passing checkbox value from view to controller MVC 4将复选框值从视图传递到控制器 MVC 4 时出现空错误
【发布时间】:2015-04-23 04:40:58
【问题描述】:

我正在尝试将复选框的值从视图传递到控制器。 这是我的代码

在模型中:

public partial class ORDER_HEADER_INFO
{
   //many other fields 
    public bool checkExport { get; set; }
}

在控制器中:

 [HttpPost]
 public void ExportCSV(List<Models.ORDER_HEADER_INFO> model) {
        foreach (Models.ORDER_HEADER_INFO item in model) {
              if (item.checkExport) {
                 //Do somethings
              }
         }

在视图中:

@model IEnumerable<TIS.Models.ORDER_HEADER_INFO>
@using (Html.BeginForm("ExportCSV", "MKP_004", FormMethod.Post)){
  <input type="submit" value="ExportCSV" />
  @foreach (var item in Model)
    {DateTime deadline = new DateTime(2015, 04, 12);
        var className = (item.PRODUCT_START_DATE >= deadline) ? "selected" : null;
        <tr class="@className">
            <td>
                @Html.ActionLink(item.ORDER_NO, "MKP_003", "MKP_003", new { id = item.ORDER_NO }, new { })
            </td>
            <td>
                @Html.DisplayFor(modelItem => item.MODEL)
            </td>
            <td>
                @Html.DisplayFor(modelItem => item.PJNO)
            </td>
            <td>
                @Html.DisplayFor(modelItem => item.DELIVERY_DESTINATION)
            </td>
            <td>
                @Html.DisplayFor(modelItem => item.PRODUCT_START_DATE)
            </td>
            <td>
                @Html.DisplayFor(modelItem => item.FINISH_FLAG)
            </td>
            <td>
               @Html.CheckBoxFor(modelItem => item.checkExport)
            </td>
        </tr>        
    }
</table>
}

我的预期结果是我可以获得所选项目的列表,然后对它们进行一些处理。在方法的参数中。我试过了:

List<Models.ORDER_HEADER_INFO> model

IEnumerable<TIS.Models.ORDER_HEADER_INFO> model

但是当我调试 model 仍然为空。

非常感谢!

【问题讨论】:

  • 您的foreach 循环正在为复选框生成重复的id 属性(无效的html)和name 属性(不能绑定到集合)。使用自定义 EditorTemplatefor 循环为 typeof ORDER_HEADER_INFO - for(int i = 0; i &lt; Model.Count; i++) { @Html.CheckBoxFor(m =&gt; m[0].checkExport) } 检查 html 之前和之后的差异
  • 当我使用 for(int i = 0; i
  • 制作模型@model IList&lt;TIS.Models.ORDER_HEADER_INFO&gt;(或List&lt;...&gt;
  • 如何替换这个“item.PRODUCT_START_DATE”。抱歉,我是 MVC 4 的新手
  • 完全相同的方式 - 在for 循环内 - @Html.DisplayFor(m =&gt; m[0].PRODUCT_START_DATE) (BTW 可怕的命名 - 遵循约定并使用 ProductStartDate)。但你也有其他问题。您的模型有一个名为MODEL 的属性,并且您还在方法中将参数命名为model,因此绑定将失败(您需要更改其中一个)

标签: asp.net-mvc asp.net-mvc-4


【解决方案1】:

正如其他人所提到的,您只需将foreach 重写为for 循环,以便它将索引应用于HTML 字段的name 属性,以便模型绑定器完成它的工作.将您的 foreach 更改为:

@for (int i = 0; i < Model.Count(); i++)
{DateTime deadline = new DateTime(2015, 04, 12);
    var className = (Model[i].PRODUCT_START_DATE >= deadline) ? "selected" : null;
    <tr class="@className">
        <td>
            @Html.ActionLink(Model[i].ORDER_NO, "MKP_003", "MKP_003", new { id = Model[i].ORDER_NO }, new { })
        </td>
        <td>
            @Html.DisplayFor(m => m[i].Model)
        </td>
        <td>
            @Html.DisplayFor(m => m[i].PJNO)
        </td>
        <td>
            @Html.DisplayFor(m => m[i].DELIVERY_DESTINATION)
        </td>
        <td>
            @Html.DisplayFor(m => m[i].PRODUCT_START_DATE)
        </td>
        <td>
            @Html.DisplayFor(m => m[i].FINISH_FLAG)
        </td>
        <td>
           @Html.CheckBoxFor(m => m[i].checkExport)
        </td>
    </tr>        
}

【讨论】:

    猜你喜欢
    • 2012-07-30
    • 1970-01-01
    • 2014-08-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-31
    • 1970-01-01
    相关资源
    最近更新 更多