我的問題是,點擊按鈕「保存」後,我從模型傳遞給控制器的視圖爲空。爲什麼ASP.NET MVC中的Action方法中模型爲null?
在這裏我的代碼的視圖和控制器。 你知道我在做什麼錯嗎? 非常感謝。
查看 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;
}
}
該列表不爲空,且包含正確的計數元素,但其中的項目爲空,且Id屬性始終爲0!
顯示你的模型。並且,你的意思'model'是'null',還是它的一個空集合,集合中的項目的某些屬性是'null'? (您不會爲屬性「id」和「description」生成任何表單控件)。什麼是'[HttpParamAction]'屬性? –
你有多個提交按鈕(因爲你使用'[HttpParamAction]')?也許你的收藏被張貼到錯誤的行爲? –