1

我正在使用这种方法,使用 viewmodel 来操作组合框中的值。现在,我很难选择创建操作中使用的实际选定值作为默认值,而不是组合中的第一个值。我知道这是其中的第四个参数,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; } 
    } 
4

3 回答 3

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)
于 2012-08-26T18:10:47.717 回答
0

至于第 4 个参数,它需要是一个实际实例,它是 GetAllUsers() 返回的集合的一部分

例如:

var users = GetAllUsers();
var defaultUser = users[0];
var model = new UserViewModel 
{ 
     UserGroups = new SelectList(users, "UserId", "Name", defaultUser) 
};

return View(model);
于 2012-08-26T18:15:02.283 回答
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 表达式中调用字符串(因此使用了 foreach 循环)。大多数 SelectList 示例没有显示如何使用该Selected属性来选择 SelectList 项中的特定值。

我希望这有帮助 :)

于 2012-08-27T17:59:53.880 回答