2016-04-14 78 views
1

我已經查看了大部分可用於SO和谷歌相關的幫助,但我不確定我在做什麼錯誤。MVC綁定具有值列表的複雜對象

我有一些屬性的模型,其中一個屬性是另一個複雜對象的列表。我無法綁定這個列表!

請大家幫忙!

這裏是我的模型類相關:

public class PrivacyModel 
{ 
     public int RatingId { get; set; } 
     public List<RatingPoint> RatingPoints { get; set; } 
} 

public class RatingPoint 
{ 
     public int RatingItemId { get; set; } 
     public string RatingValue { get; set; } 
} 

這裏是我的代碼:

[HttpPost] 
public ActionResult Index(PrivacyModel model) 
{ 
    .... my business logic.... 
} 

我的看法是這樣的:

@using (Html.BeginForm("Index", "Privacy")) 
     { 

      <input type="hidden" name="RatingId" value="@Model.RatingId" /> 

      for (var i = 0; i < Model.RatingPoints.Count; i++) 
      { 

       var ratingPoint = Model.RatingPoints[i]; 

       <input type="hidden" name="PrivacyModel.RatingPoints[@i].RatingItemId" value="@ratingPoint.RatingItemId" /> 

       <input type="hidden" name="PrivacyModel.RatingPoints[@i].RatingValue" @("id=RatingPoints" + ratingPoint.RatingItemId) value="@ratingPoint.RatingValue" /> 
      } 
     <input class="btn" type="submit" value="Submit" /> 
    } 

請不要介意價值和ID字段,他們正在更新jQuery正確地在我的頁面的某個地方。

這引起了我的RatingPoints空單在我的行動

我在PrivacyModel.RatingPoints[@i].也試過不帶前綴PrivacyModel,但是這讓我的RatingPoints列表爲空在我的行動

我也曾嘗試在建議的解決方案here使用索引像非連續的項目

+0

始終使用強類型的HtmlHelper方法來生成您的html。 - '@ Html.HiddenFor(m => m.RatingPoints [i] .RatingItemId)' - 現在檢查它生成的正確的名稱屬性:) –

+0

我會嘗試,也建議[Ehsans](http:// stackoverflow.com/questions/36623290/mvc-binding-complex-objects-with-list-of-values/#answer-36623484)回答如下 – simsim

回答

3

你正在創造一種複雜的自己,你可以只使用HiddenFor()幫手此:

for (var i = 0; i < Model.RatingPoints.Count; i++) 
{ 


    @Html.HiddenFor(x=> Model.RatingPoints[i].RatingItemId) 
    @Html.HiddenFor(x=> Model.RatingPoints[i].RatingValue,new { id= "RatingPoints"+Model.RatingPoints[i].RatingItemId})  

} 

這將呈現相同的html,並且值將在模型中正確綁定在post處。