【问题标题】:.net mvc selectlist multiple sources.net mvc 选择列表多个来源
【发布时间】:2012-11-27 15:38:47
【问题描述】:

我有一个我从 Active Directory 中检索的用户列表

PrincipalContext pc = new PrincipalContext(ContextType.Domain, "DOMAIN", "dc=domain,dc=org");
GroupPrincipal group = GroupPrincipal.FindByIdentity(pc, "Advisors");
ViewBag.EmployeeID = new SelectList(group.Members, "EmployeeID", "DisplayName");

我想在此列表中添加两个额外的项目,但不想在 Active Directory 中为他们创建用户帐户,因为他们不是真正的用户。

有没有可能做类似的事情

var items1 = new[] 
{  
    new { EmployeeID = "1", DisplayName = "Independent" },
    new { EmployeeID = "2", DisplayName = "Own" }
};

var items = Concat(group.Members, items1);
{
    ViewBag.EmployeeID = new SelectList(items, "EmployeeID", "DisplayName");
}

【问题讨论】:

  • group.Members的类型是什么?您可以转换为这种类型的列表,将一些对象添加到此列表中并将其绑定到ViewBag
  • 抱歉@Felipe 不确定您的意思。
  • 好吧,你可以得到group.Members 并将这两个iten 添加到这个列表中,并将其设置为ViewBag 以在View 上的comboBox 上看到。您不能将匿名类型添加到强类型列表中。
  • 我不相信它是强类型的。您能否举例说明如何添加其他项目?

标签: asp.net-mvc active-directory


【解决方案1】:

嗯,你可以有这样的ViewModel

public class EmployeeViewModel
{
    public string EmployeeId { get; set; }
    public string DisplayName { get; set; }
}

您可以将 group.Members 转换为 ViewModel 列表,在此列表中添加一些自定义项并将此列表设置为 ViewBag。

var members = group.Members.Select(x => new EmployeeViewModel() { EmployeeId = x.EmployeeId, DisplayName = x.DisplayName }).ToList();

members.Add(new EmployeeViewModel() { EmployeeId = "1", DisplayName = "Independent" });
members.Add(new EmployeeViewModel() { EmployeeId = "2", DisplayName = "Own" });

ViewBag.EmployeeID = new SelectList(members, "EmployeeID", "DisplayName");

【讨论】:

  • 谢谢@Felipe。差不多好了。唯一的问题是 EmployeeId 不能被 GroupPrincipal 使用,而是被 UserPrincipal 使用。你知道如何解决这个问题吗?
  • 没关系!在这里得到答案stackoverflow.com/a/13609465/1472203 感谢@Felipe 为我指明了正确的方向。
  • 好吧,您可以使用 ViewModel 仅将必要的内容发送到 View。如果键入列表,则不能在其中添加匿名类型。 :)
猜你喜欢
  • 1970-01-01
  • 2020-07-19
  • 2020-01-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多