Asp.net mvc 3 MVC 3:使用ASP成员角色中的用户填充下拉列表;经理;

Asp.net mvc 3 MVC 3:使用ASP成员角色中的用户填充下拉列表;经理;,asp.net-mvc-3,razor,Asp.net Mvc 3,Razor,因此,我在我的应用程序中实现ASP成员资格和角色管理。我还有第二个用户表,其中包含所有与成员资格无关的信息。我将电子邮件设置为成员身份中的用户名和用户表中的外键 我正在自定义注册页面以包含下拉列表,以便在创建帐户时可以选择经理。经理列表是通过查找角色为“经理”的所有成员用户,然后创建外键与结果匹配的用户集合来生成的 List<string> managerNames = new List<string>(Roles.GetUsersInRole("Manager"));

因此,我在我的应用程序中实现ASP成员资格和角色管理。我还有第二个用户表,其中包含所有与成员资格无关的信息。我将电子邮件设置为成员身份中的用户名和用户表中的外键

我正在自定义注册页面以包含下拉列表,以便在创建帐户时可以选择经理。经理列表是通过查找角色为“经理”的所有成员用户,然后创建外键与结果匹配的用户集合来生成的

List<string> managerNames = new List<string>(Roles.GetUsersInRole("Manager"));
var managers = from m in _db.Users where managerNames.Contains(m.Email) select m;
ViewBag.managers = managers;
这与我的观点一致

@Html.DropDownList("ManagerID", (List<SelectListItem>)ViewBag.managers)
@Html.DropDownList(“ManagerID”,(列表)ViewBag.managers)
它是有效的。这仍然是最好的方法吗

这仍然是最好的方法吗

不可以。最好的方法是使用视图模型,而忽略ViewBag/ViewData的存在。因此,从设计满足视图要求的视图模型开始(显示管理器的ddl):

最后,在强类型视图中:

@model MyViewModel
...
@Html.DropDownListFor(
    x => x.SelectedManagerId, 
    Model.Managers, 
    "-- Select a manager --"
)
因此,每当您在ASP.NET MVC应用程序中使用ViewBag/ViewData时,就会响起警报,告诉您有更好的方法

这仍然是最好的方法吗

不可以。最好的方法是使用视图模型,而忽略ViewBag/ViewData的存在。因此,从设计满足视图要求的视图模型开始(显示管理器的ddl):

最后,在强类型视图中:

@model MyViewModel
...
@Html.DropDownListFor(
    x => x.SelectedManagerId, 
    Model.Managers, 
    "-- Select a manager --"
)

因此,每当您在ASP.NET MVC应用程序中使用ViewBag/ViewData时,就会响起警报,告诉您有更好的方法。

这是多么乏味或过分?在你的管理者对象中循环对我来说听起来很琐碎。如果这是最好的方法,我会很乐意这样做。我只是不知道这是不是最好的方法。这是多么乏味或过分?在你的管理者对象中循环对我来说听起来很琐碎。如果这是最好的方法,我会很乐意这样做。我只是不知道这是否是最好的方法。我得到了LINQ表达式不允许的LINQ错误。ToString()。我正在想办法解决这个问题。想法?@Watermark Studios,在LINQ查询结束时和构建视图模型之前调用
.ToList()
,以便急切地获取消息变量。达林:你的方法真的很好。我得到了LINQ表达式不允许的LINQ错误。ToString()。我正在想办法解决这个问题。想法?@Watermark Studios,在LINQ查询结束时和构建视图模型之前调用
.ToList()
,以便急切地获取消息变量。达林:你的方法真的很好。
public ActionResult Foo()
{        
    var managers = ... query your repository to get them
    var model = new MyViewModel
    {
        Managers = managers.Select(x => new SelectListItem
        {
            Value = x.UserID.ToString(),
            Text = x.DisplayName
        })
    };
    return View(model);
}
@model MyViewModel
...
@Html.DropDownListFor(
    x => x.SelectedManagerId, 
    Model.Managers, 
    "-- Select a manager --"
)