我的模特是
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)
{
在发布到新方法的过程中,模型变为空,有什么想法吗?
答案 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)