2012-11-27 39 views
0

我有我從Active Directory檢索像這樣.NET MVC選擇列表的多個來源

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"); 
} 
+0

'group.Members'類型是什麼?您可以將其轉換爲此類型的列表,將一些對象添加到此列表並將其綁定到「ViewBag」。 –

+0

對不起@菲利普不確定你的意思。 – Stephen

+0

那麼,你可以得到這個組。成員並在這個列表中添加這兩個itens,並將其設置爲ViewBag,以查看View上的組合框。您不能將匿名類型添加到強類型列表。 –

回答

1

好了,你可以有一個ViewModel這樣的:

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

比,就可以把group.Members你的視圖模型的列表,在此列表中添加一些自定義的itens並將此列表設置爲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"); 
+0

謝謝@Felipe。差不多了。唯一的問題是,EmployeeId不是由GroupPrincipal提供的,而是由UserPrincipal提供的。你知道如何解決這個問題嗎? – Stephen

+0

沒關係!得到了答案在這裏http://stackoverflow.com/a/13609465/1472203謝謝@Felipe指着我在正確的方向。 – Stephen

+0

那麼,你可以使用ViewModel發送給View只需要。如果列表是鍵入的,則不能在其中添加匿名類型。 :) –