2015-12-28 41 views
0

我的模型是型号为NULL在Httppost MVC

public class IssueEntryModel 
{ 
    public IEnumerable<SelectListItem> OrderNumbers { get; set; } 
    public string SelectedWorkOrder { get; set; } 
    public string MaterialCode 
    { 
     get; set; 
    } 
    public List<GroupedIssueData> MaterialData { get; set; } 
} 

和视图是

@model InventoryEasy15.Models.IssueEntryModel 

@{ 
    var issueData = Model.MaterialData; 
    var workorders = Model.SelectedWorkOrder; 
} 
@using (Html.BeginForm("SaveIssueEntry", "IssueMaster", FormMethod.Post, new { id = "issueEntryForm" })) 
{ 
    @for (int i = 0; i < issueData.Count(); i++) 
    { 
     <tr> 
      <td>@issueData[i].MaterialCode</td> 
      <td>@issueData[i].MaterialDescription</td> 
      <td>@issueData[i].Unit</td> 
      <td>@issueData[i].ReqQty</td> 
      <td>@Html.TextBoxFor(m => issueData[i].IssueQty, new { style = "width:70px" })@Html.ValidationMessageFor(m => issueData[i].IssueQty)</td> 
      <td class="text-center">@Html.CheckBoxFor(m => issueData[i].isSavings)</td> 
     </tr> 
    } 

而且我有交方法

public ActionResult SaveIssueEntry(IssueEntryModel model) 
{ 
    var result = new Dictionary<string, string>(); 

的GET包含细节填写视图为

//Method Get the material details based on the work order id 
public async Task<ActionResult> GetWorkOrderMaterialDetails(IssueEntryModel m) 
{ 

在发布新方法期间,模型变为null,有什么想法?

+0

虽然你没有张贴'GroupedIssueData'但尝试:'@MaterialData [i] .MaterialCode'等和[这个SO](http://stackoverflow.com/questions/18372439/model-object-passed-to-httppost-action-is-having-null-values)可以为您提供一些背景。 –

回答

1

Razor使用传递给HTML助手的表达式来建立输入的正确名称,这将允许模型绑定者在发布后正确绑定它们。这意味着表达式需要与属性的访问方法完全匹配。通过将Model.MaterialData保存到issueData变量并利用它,你会破坏这个。换句话说,你最后输入的名字是issueData[0].IssueQty,而不是MaterialData[0].IssueQty。模型绑定器不知道如何处理issueData,因为模型上没有任何内容匹配。

长与短,您的文本需要被声明如下:

@Html.TextBoxFor(m => m.MaterialData[i].IssueQty, ...) 

同样为您的复选框:

@Html.CheckBoxFor(m => m.MaterialData[i].isSavings) 
+0

伟大的工作。还有一个问题,​​@ Html.LabelFor(m => m.MaterialData [i] .MaterialCode)打印为MaterialCode而不是细节,我想将它显示为标签,除了reqqty。有什么想法吗? – Techonthenet

+0

使用'DisplayFor'。 'LabelFor'从字面上打印属性名称。 –