2016-04-12 97 views
0

我的問題是,點擊按鈕「保存」後,我從模型傳遞給控制器​​的視圖爲空。爲什麼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!

+0

顯示你的模型。並且,你的意思'model'是'null',還是它的一個空集合,集合中的項目的某些屬性是'null'? (您不會爲屬性「id」和「description」生成任何表單控件)。什麼是'[HttpParamAction]'屬性? –

+0

你有多個提交按鈕(因爲你使用'[HttpParamAction]')?也許你的收藏被張貼到錯誤的行爲? –

回答

1

您的ID和說明將始終爲0,因爲您沒有使用任何輸入來將其張貼在表單中。如果你想返回它們,你必須使用輸入隱藏來傳遞這個值

<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

答案也是Stephen Muecke的答案... \t 「既然Field1是一個可空的布爾,它需要是@Html .EditorFor(m => Model [i] .Field1)(末尾沒有值) - Stephen Muecke「 非常感謝你們 – Charles

相關問題