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 的模型中正确绑定。
我已经查看了 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 的模型中正确绑定。