MVC 使用值列表绑定复杂对象

MVC Binding complex objects with list of values

我已经查看了 SO 中的大部分可用帮助以及与此相关的 google,但我不确定我做错了什么。

我的模型有一些属性,其中一个属性是另一个复杂对象的列表。我无法绑定此列表!

请帮忙!

这是我的模型 类 相关:

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" />
     }

请不要介意 value 和 id 字段,它们由 jQuery 在我页面的某处正确更新。

这让我在操作中得到了一个 RatingPoints 的空列表

我也尝试过在 PrivacyModel.RatingPoints[@i]. 中不使用前缀 PrivacyModel,但这在我的操作

中得到了一个空列表 RatingPoints

我也尝试过像建议的解决方案 here 那样对非顺序项目使用索引

你自己让它变得复杂,你可以使用 HiddenFor() helper 来解决这个问题:

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 的模型中正确绑定。