您可能希望手动构建 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 表达式中调用字符串(因此使用了 foreach 循环)。大多数 SelectList 示例没有显示如何使用该Selected
属性来选择 SelectList 项中的特定值。
我希望这有帮助 :)