【发布时间】:2011-02-02 01:06:05
【问题描述】:
我试图弄清楚这个 DropDownListFor 是如何工作的,但没有成功。
我的控制器创建了一个 SelectListItems 列表,我将在数据库中找到的所有组放在其中:
viewModel.Groups = LoadGroups(viewModel.User.AssociatedGroups);
这个方法:
private IList<SelectListItem> LoadGroups(List<String> associatedGroups)
{
var groups = _SecurityService
.LoadGroups()
.Select(e => new SelectListItem
{
Selected = associatedGroups.Contains<System.String>(e.Id.ToString()),
Value = e.Id.ToString(),
Text = e.Name
}).ToList();
return (groups);
}
如您所见,如果列表中有关联的组,我会设置 Selected 元素。 我将此列表放在自定义视图模型的字段(组)中:
public class UsersViewModel
{
public UsersViewModel()
{
this.Groups = new List<SelectListItem>();
}
public Models.User User { get; set; }
public IList<SelectListItem> Groups { get; set; }
}
并将 UsersViewModel 发送到视图。我使用这段代码来构建一个带有多选的下拉列表:
<%=Html.DropDownListFor(m => m.User.AssociatedGroups, (List<System.Web.Mvc.SelectListItem>)Model.Groups, new { @class = "dropDownGroups", multiple = "multiple" })%>
AssociatedGroups 是用户类的一个字段(它是我的视图模型的成员):
public List<String> AssociatedGroups { get; set; }
这里没有什么特别之处。 如果我使用此代码,我将看不到所选下拉列表的元素(并且它们具有属性集,我已仔细检查过),但我可以在发布表单时将选择与 AssociatedGroups 绑定。 如果我用字符串更改 AssociatedGroups(用户类的字段):
public String AssociatedGroups { get; set; }
我有相反的行为:
我可以看到下拉列表的元素被选中,但是当我发布表单时没有绑定,或者更好的是,只有一个元素被绑定。 我一天中的大部分时间都在试图找出问题所在,我尝试了不同的组合,但它们似乎都不起作用。 有没有人可以帮助我?
谢谢。
【问题讨论】:
标签: asp.net-mvc-2