我在视图中有以下代码. (index.cshtml)
约束问题
>第一个下拉列表根据’ChildItem’编辑器模板选择正确的值.
>使用内联下拉列表的第二个示例不起作用我不想创建一个编辑器模板只是为了显示下拉值.
>奇怪的是TextBoxFor将显示正确的值.这似乎只是下拉列表中的一个问题.
如何修复绑定以便第二次下拉工作?我调试了它.看来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)
它看起来像这样:
最佳答案 我后来发现了这个:
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;
}
}