模型在Httppost mvc中是空的

时间:2015-12-28 15:54:59

标签: asp.net-mvc-4

我的模特是

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>
    }

我有post方法

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)
{

在发布到新方法的过程中,模型变为空,有什么想法吗?

1 个答案:

答案 0 :(得分:1)

Razor使用传递给HTML帮助程序的表达式来为输入构建正确的名称,以便模型绑定器在post上正确绑定它们。这意味着表达式需要匹配属性的访问方法。通过将Model.MaterialData保存到issueData变量并利用它,您就会破坏它。换句话说,您最终会得到名为issueData[0].IssueQty的输入,而不是MaterialData[0].IssueQty。模型绑定器不知道如何处理帖子上的issueData,因为模型上没有任何内容与之匹配。

长短,您的文本框需要声明为:

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

同样适用于您的复选框:

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