2016-04-14 2 views
1

Я посмотрел большую часть доступной помощи в SO и Google, связанной с этим, но я не уверен, что я делаю неправильно.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 в PrivacyModel.RatingPoints[@i]., но это у меня пустой список 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, и значения будут правильно привязаны к модели в столбце.

Смежные вопросы