我使用以下内容生成下拉列表:
@for (var index = 0; index < Model.AdminSummaries.Count(); index++)
{
<div class="rep_tr0">
<div class="rep_td0">
@Html.DropDownListFor(x => Model.AdminSummaries[index].Status,
AdminStatusReference.GetAdminStatusOptions(),
new { id = string.Format("Status_{0}",index ) })
</div>
</div>
}
以下是它生成的HTML:
<select id="Status_1" name="AdminSummaries[1].Status"><option value="1">Released</option>
<option value="2">Review</option>
<option value="3">New</option>
</select>
这是提供状态选项的类。
public static class AdminStatusReference
{
public static IEnumerable<SelectListItem> GetAdminStatusOptions()
{
return new[]
{
new SelectListItem { Value = "1", Text = "Released" },
new SelectListItem { Value = "2", Text = "Review" },
new SelectListItem { Value = "3", Text = "New" }
};
}
}
一切正常,除非它没有正确选择项目。 “选定”没有选项可以匹配AdminSummaries中的数据。
如何选择正确的选择列表项?
只是澄清一下。我的问题是,如果状态的数据记录值为3,那么当我查看屏幕时,我会看到一个显示“Release”字样的选择列表。
我需要的是选择列表显示与数据值对应的文本。
答案 0 :(得分:1)
将SelectListItem.Selected
属性设置为true
:
public static class AdminStatusReference
{
public static IEnumerable<SelectListItem> GetAdminStatusOptions()
{
return new[]
{
new SelectListItem { Value = "1", Text = "Released", Selected = true },
new SelectListItem { Value = "2", Text = "Review" },
new SelectListItem { Value = "3", Text = "New" }
};
}
}
答案 1 :(得分:1)
这是更准确的答案
public static class AdminStatusReference
{
public static IEnumerable<SelectListItem> GetAdminStatusOptionsFor(AdminSummaries arg)
{
var options = new[]
{
new SelectListItem { Value = "1", Text = "Released" },
new SelectListItem { Value = "2", Text = "Review" },
new SelectListItem { Value = "3", Text = "New" }
};
options.First(o=> o.Value == arg).Selected = true;
return options;
}
}
答案 2 :(得分:1)
从源代码中发现DropDownListFor
方法(实际上ViewDataEvaluator.Eval
方法)不支持包含索引器的表达式。因为您的表达式:AdminSummaries[index].Status
包含一个索引器,这就是框架不使用模型类中所选值的原因。
唯一的解决方案是在设置SelectListItem
集合时指定所选项目,您可以通过将当前选定的值传递到GetAdminStatusOptions
方法来执行此操作:
查看:
@Html.DropDownListFor(x => Model.AdminSummaries[index].Status,
AdminStatusReference.GetAdminStatusOptions(Model.AdminSummaries[index].Status),
new { id = string.Format("Status_{0}",index ) })
示例GetAdminStatusOptions实现:
public static IEnumerable<SelectListItem> GetAdminStatusOptions(string selected = null)
{
var options = new[]
{
new SelectListItem {Value = "1", Text = "Released"},
new SelectListItem {Value = "2", Text = "Review"},
new SelectListItem {Value = "3", Text = "New"}
};
foreach (var option in options)
{
option.Selected = option.Value == selected;
}
return options;
}