我在视图中有以下代码。 (index.cshtml)
绑定问题
如何修复绑定以便第二次下拉工作?我调试了它。看来ViewData.Eval没有从_.Children[i].ChooseId
中获取正确的值。
更新(错误)
这是MVC框架http://aspnet.codeplex.com/workitem/8311
@using (Html.BeginForm())
{
for (int i = 0; i < Model.Children.Count(); i++)
{
<p>A: @Html.EditorFor(_ => _.Children[i], "ChildItem")</p>
<p>B: @Html.DropDownListFor(_ => _.Children[i].ChooseId, TestModel.PeopleSelect)</p>
}
<button type="submit">GO</button>
}
我尝试使用DropDownListFor(_ => Model.Children[i].ChooseId)
,结果相同。
使用TextBoxFor(_ => _.Children[i].ChooseId)
显示正确的值 wierd?
此处参考的是ChildItem.cshtml
@using dropdown.Controllers
@using dropdown.Models
@model dropdown.Models.TestPerson
@Html.DropDownListFor(_ => _.ChooseId, TestModel.PeopleSelect)
看起来像这样:
答案 0 :(得分:2)
我后来发现了这个:http://aspnet.codeplex.com/workitem/8311 这是一个确认的错误。
我找到的唯一解决方法就是这个。
@Html.DropDownListFor(_ => _.Children[i].ChooseId, Mark(TestModel.PeopleSelect, Model.Children[i].ChooseId))
@functions {
private IEnumerable<SelectListItem> Mark(IEnumerable<SelectListItem> items, object Id)
{
foreach (var item in items)
if (string.CompareOrdinal(item.Value, Convert.ToString(Id)) == 0)
item.Selected = true;
return items;
}
}
答案 1 :(得分:0)
您可以将这些项目放到局部视图中并为您的子对象加载,或者...
您可以选择对子集合进行React.Component
循环,并像这样使用它:
this.state
这假定已将foreach
创建为foreach (var itm in Model.Children)
{
@Html.DropDownListFor(modelItem => itm.ChooseId,
new SelectList( (IEnumerable<SelectListItem>)TestModel.PeopleSelect, "Value", "Text", itm.ChooseId),
htmlAttributes: new { @class = "form-control" }
)
}
或TestModel.PeopleSelect
。我正确回答以下相关问题的代码是:ASP.NET MVC4 Model's Child Collection Drop Down List not binding properly
在子集合上执行SelectListItem[]
循环会给我错误:
不能将带有[]的索引应用于类型为'ICollection'的表达式
所以我不建议这样做。