大家好,我在其中一个页面上有下拉列表的奇怪错误!
我在3个下拉列表中使用了这样的代码:
//GetTypes returns collection of all availibale types from database
ViewData["Types"] = new SelectList(dataManager.IssueTypes.GetTypes(), "Id", "Title", issue.Type);
它很棒!
但是当我像这样使用它时:
// GetRoles returns collection of all availibale roles
ViewData["Roles"] = new SelectList(dataManager.Membership.GetRoles(), "RoleId", "RoleName",
dataManager.Membership.GetUserRole(id));
它始终显示默认值! 我看了很多次debuger这个代码但是看起来很好! 将不胜感激任何帮助!
查看代码:
%: Html.DropDownList("RoleId", ViewData["Roles"] as IEnumerable<SelectListItem>)%>
答案 0 :(得分:0)
我不知道你的dataManager.Membershop.GetUserRole(id)返回什么类型?
但您需要更改此调用中的第4个参数:
ViewData["Roles"] = new SelectList(dataManager.Membership.GetRoles(), "RoleId", "RoleName",
dataManager.Membership.GetUserRole(id));
类似于:
ViewData["Roles"] = new SelectList(dataManager.Membership.GetRoles(), "RoleId", "RoleName",
dataManager.Membership.GetUserRole(id).RoleId);
注意最后的RoleId?您指定为所选项目的对象应该是项目的Value属性的值 - 而不是整个对象。
答案 1 :(得分:0)
如何使用视图模型而不是ViewData
?每当我看到有人使用ViewData
时,我觉得自己有义务将此视为个人,我认为是最佳做法。
首先定义视图将使用的视图模型:
public class RolesViewModel
{
public string SelectedRoleId { get; set; }
public IEnumerable<SelectListItem> Roles { get; set; }
}
现在让我们转到控制器操作,该操作将填充此视图模型并将其传递给视图:
public ActionResult Foo(string id)
{
var model = new RolesViewModel
{
SelectedRoleId = dataManager.Membership.GetUserRole(id),
Roles = dataManager.Membership.GetRoles().Select(x => new SelectListItem
{
Value = x.RoleId,
Text = x.RoleName
})
};
return View(model);
}
好的,现在您应该确保SelectedRoleId
表示Roles
集合中存在的字符串值。这是预选下拉列表的内容。
最后是强类型视图:
<%= Html.DropDownListFor(
x => x.SelectedRoleId,
new SelectList(Model.Roles, "Value", "Text")
)%>