2016-04-14 92 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处。