我的问题是,点击按钮" Save"后,我从视图传递给控制器的模型为空。
这是我的View和Controller的代码。 你知道我做错了吗? 非常感谢你。
查看 Certificazioni.cshtml
@model List<ElencoCertificazioniItem>
...
@using (Html.BeginForm())
{
@Html.AntiForgeryToken()
...
<tbody>
@{
for (int i = 0; i < Model.Count; i++)
{
<tr>
<td>@Html.LabelFor(m => Model[i].Id) </td>
<td>@Html.LabelFor(m => Model[i].description)</td>
<td>@Html.EditorFor(m => Model[i].Field1.Value)</td>
<td>@Html.EditorFor(m => Model[i].Field2.Value)</td>
</tr>
}
}
</tbody>
}
....
}
控制器
[HttpPost]
[ValidateAntiForgeryToken]
[HttpParamAction]
public ActionResult SaveItems(List<ElencoCertificazioniItem> model)
{
//the items here is null!!! ;(
return saveItems(model);
}
模型
public class ElencoCertificazioniItem
{
public int Id { get; set; }
public string description { get; set; }
public bool? Field1 { get; set; }
public bool? Field2 { get; set; }
}
我使用HttpParamAction来管理对不同方法控制器的调用(我在同一个表单中有2个按钮)。
public class HttpParamActionAttribute : ActionNameSelectorAttribute
{
public override bool IsValidName(ControllerContext controllerContext, string actionName, MethodInfo methodInfo)
{
if (actionName.Equals(methodInfo.Name, StringComparison.InvariantCultureIgnoreCase))
return true;
var request = controllerContext.RequestContext.HttpContext.Request;
return request[methodInfo.Name] != null;
}
}
列表不为空且包含正确的计数元素,但其中的项目为null,Id属性始终为0!
答案 0 :(得分:1)
您的ID和说明将始终为0且为空,因为您不会使用任何输入在表单中发布它们。如果要返回它们,则必须使用输入hiddent传递此值
<tr>
<td>
@Html.LabelFor(m => Model[i].Id)
@Html.HiddenFor(m => Model[i].Id)
</td>
<td>
@Html.LabelFor(m => Model[i].description)
@Html.HiddenFor(m => Model[i].description)
</td>
<td>@Html.EditorFor(m => Model[i].Field1)</td>
<td>@Html.EditorFor(m => Model[i].Field2)</td>
</tr>