2015-12-28 39 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'從字面上打印屬性名稱。 –