Asp.net mvc 将复选框值从视图传递到控制器MVC 4时出现Null错误

Asp.net mvc 将复选框值从视图传递到控制器MVC 4时出现Null错误,asp.net-mvc,asp.net-mvc-4,Asp.net Mvc,Asp.net Mvc 4,我试图将复选框的值从视图传递到控制器。 这是我的密码 在模型中: 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 (Mo

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

在模型中:

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
              }
         }
[HttpPost]
公共void导出CSV(列表模型){
foreach(模型中的Models.ORDER\u HEADER\u信息项){
如果(项目检查导出){
//做事
}
}
鉴于:

@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>
}
@model IEnumerable
@使用(Html.BeginForm(“ExportCSV”、“MKP_004”、FormMethod.Post)){
@foreach(模型中的var项目)
{DateTime截止日期=新的日期时间(2015年4月12日);
var className=(item.PRODUCT\u START\u DATE>=截止日期)?“已选”:空;
@ActionLink(item.ORDER_NO,“MKP_003”,“MKP_003”,new{id=item.ORDER_NO},new{})
@DisplayFor(modeleItem=>item.MODEL)
@DisplayFor(modeleItem=>item.PJNO)
@DisplayFor(modelItem=>item.DELIVERY\u目的地)
@DisplayFor(modelItem=>item.PRODUCT\u开始日期)
@DisplayFor(modelItem=>item.FINISH_标志)
@CheckBoxFor(modelItem=>item.checkExport)
}
}
我的预期结果是,我可以获得所选项目的列表,然后对它们进行一些处理。在方法的参数中。我尝试过:

List<Models.ORDER_HEADER_INFO> model
列表模型

IEnumerable模型
但是当我调试模型时,仍然为空


非常感谢!

正如其他人所提到的,您只需将
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>        
}
for(int i=0;i=截止日期)?“选中”:空; @ActionLink(模型[i]。订单号,“MKP\u 003”,“MKP\u 003”,新{id=Model[i]。订单号,新{}) @DisplayFor(m=>m[i].Model) @DisplayFor(m=>m[i].PJNO) @Html.DisplayFor(m=>m[i].DELIVERY\u DESTINATION) @DisplayFor(m=>m[i].PRODUCT\u START\u DATE) @DisplayFor(m=>m[i].FINISH\u标志) @Html.CheckBoxFor(m=>m[i].checkExport) }
您的
foreach
循环正在为复选框生成重复的
id
属性(无效html)和
name
属性(无法绑定到集合)。使用
for
for自定义
编辑器或模板的
循环
for typeof
ORDER\u HEADER\u INFO
-
for(int i=0;im[0].checkExport)}
检查之前和之后的Html以查看差异当我使用for(int i=0;i@Model IList
(或
List
)如何替换此“item.PRODUCT\u START\u DATE”“.对不起,我对MVC 4完全是新手,完全是以同样的方式-在
for
循环中-
@Html.DisplayFor(m=>m[0].PRODUCT\u START\u DATE)
(可怕的命名BTW-遵循约定并使用ProductStartDate)。但您还有其他问题。您的模型有一个名为
model
的属性,并且您还在方法
model
中命名了参数,因此绑定将失败(您需要更改其中一个)
@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>        
}