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

时间:2016-04-14 12:34:58

标签: c# asp.net-mvc asp.net-mvc-4 model-binding

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

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

请求帮助!

以下是我的Model类相关:

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中使用类似非顺序项

的索引

1 个答案:

答案 0 :(得分: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,并且值将在模型中正确绑定。