我正在使用这种方法使用viewmodel来操作组合框中的值。现在,我很难选择在create action中使用的默认值实际选择值,而不是combo中的第一个。我知道这是SelectList
中的第四个参数,但我不知道如何使用实际UserGroupId
因为它在使用时会给我一个错误
var model = new UserViewModel
{
UserGroups = new SelectList(GetAllUsers(), "UserId", "Name", UserGroupId)
}
return View(model);
public class UserViewModel
{
public int UserGroupId { get; set; }
public IEnumerable<SelectListItem> UserGroups { get; set; }
}
答案 0 :(得分:1)
像这样:
var model = new UserViewModel
{
// preselct an item in the dropdown whose value equals 5
// This means that inside your `GetAllUsers()` collection you must
// have an element with UserId=5 and this element will automatically be
// preselcted. Here you could put any value of course
UserGroupId = 5,
UserGroups = new SelectList(GetAllUsers(), "UserId", "Name")
};
return View(model);
并在您看来:
@model UserViewModel
...
@Html.DropDownListFor(x => x.UserGroupId, Model.UserGroups)
答案 1 :(得分:0)
对于第4个参数,它需要是GetAllUsers()返回的集合的一部分的实际实例
例如:
var users = GetAllUsers();
var defaultUser = users[0];
var model = new UserViewModel
{
UserGroups = new SelectList(users, "UserId", "Name", defaultUser)
};
return View(model);
答案 2 :(得分:0)
您可能希望手动构建SelectList而不是使用SelectList构造函数。这将为您提供处理“UserId”和“Name”所需的控制权。这也解决了如何将整数记录ID添加到选择列表的问题。
让我们从一个构建并返回List<SelectListItem>
public static List<SelectListItem> UserGroups(int userGroupId, int selectedUserId)
{
var userGroupsQuery = from u in dbContext.Users
where u.UserGroupId == userGroupId
select u;
var userSelectList= new List<SelectListItem>();
foreach (var user in userGroupsQuery.Users)
{
userSelectList.Add(
new SelectListItem
{
Text = userGroup.Name,
Value = userGroup.UserId.ToString(CultureInfo.InvariantCulture),
Selected = (user.UserId == selectedUserId)
};
}
return userSelectList;
}
现在我们有一个可以使用的选择列表,所以我们可以在我们的操作方法中使用它。
int selectedUserId = 1000;
int userGroupId = 5;
var userViewModel = new UserViewModel
{
UserGroups = ListLookup.UserGroups(userGroupId, selectedUserId)
}
return View(userViewModel);
然后在视图中。
@Html.DropDownList("UserId", Model.Users)
这里的关键是选择列表中的Value
属性必须是字符串,而不是整数。另请注意,默认情况下不能在lambda表达式中调用string(因此使用foreach循环)。大多数SelectList示例未显示如何使用Selected
属性在SelectList项中选择特定值。
我希望这会有所帮助:)