私の問題は、「保存」ボタンをクリックした後、ビューからコントローラに渡されたモデルがnullになることです。ASP.NET MVCのアクションメソッドでモデルが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;
}
}
リストはNULLではなく、右のカウント要素を含みますが、内の項目はnullであり、Idプロパティは常に0です!
モデルを表示します。そして、あなたの平均 'model'が' null'か、それとも空のコレクションで、コレクション内のアイテムのいくつかのプロパティが 'null'ですか? (あなたは 'id'と' description'のプロパティのフォームコントロールを生成しません)。 '[HttpParamAction]'属性は何ですか? –
([HttpParamAction] 'を使うので)複数の送信ボタンがありますか?あなたのコレクションが間違ったアクションに投稿されている可能性がありますか? –