2016-04-12 19 views
0

私の問題は、「保存」ボタンをクリックした後、ビューからコントローラに渡されたモデルが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です!

+0

モデルを表示します。そして、あなたの平均 'model'が' null'か、それとも空のコレクションで、コレクション内のアイテムのいくつかのプロパティが 'null'ですか? (あなたは 'id'と' description'のプロパティのフォームコントロールを生成しません)。 '[HttpParamAction]'属性は何ですか? –

+0

([HttpParamAction] 'を使うので)複数の送信ボタンがありますか?あなたのコレクションが間違ったアクションに投稿されている可能性がありますか? –

答えて

1

IDと説明は、フォームで投稿するために入力を使用しないため、常に0とNULLになります。これらの値を返す場合は、この値を渡すために入力ヒントを使用する必要があります。

<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> 
+0

ありがとうございました...私は今すぐ確認IDと説明は大切です...非常にありがとう – Charles

+0

答えはスティーブンMueckeのものです... \t "Field1はnull可能なブールなので、それは@Htmlである必要があります.EditorFor(m => Model [i] .Field1)(最後の値はありません) - Stephen Muecke " ありがとう – Charles

関連する問題