2012-04-12 48 views
1

我想創建一個列表框將包含我所有的ASP.NET用戶的頁面。與所有ASP.NET用戶填充Html.Listbox

但是我有很多問題試圖使Html.Listbox接受用戶列表。

我也試着這樣做:

<%: Html.ListBox("Membershipusers", Membership.GetAllUsers())%> 

和數不勝數的其他方法類似於此。我也有我的控制器上的一個方法,看起來像這樣:

public ActionResult getAllMembershipUsers() 
    { 
     MembershipUserCollection membershipusers = new MembershipUserCollection(); 

     membershipusers = Membership.GetAllUsers(); 

     return View(membershipusers); 
    } 

現在看來似乎是能夠創建用戶的名單,但我還是不知道如何表達我的列表框中該列表。

希望有人能幫助我在這裏。

回答

2

如何使用視圖模型?你有沒有嘗試過這種方法?

public class UsersViewModel 
{ 
    public IEnumerable<string> SelectedUsers { get; set; } 
    public IEnumerable<SelectListItem> AvailableUsers { get; set; } 
} 

,然後控制器將填充此視圖模型:

public ActionResult Index() 
{ 
    var users = Membership.GetAllUsers().Cast<MembershipUser>(); 
    var model = new UsersViewModel 
    { 
     AvailableUsers = users.Select(u => new SelectListItem 
     { 
      Value = u.UserName, 
      Text = u.UserName 
     }) 
    }; 

    return View(model); 
} 

終於在強類型視圖我用你建議的方法視圖模型

<%@ Page Language="C#" Inherits="System.Web.Mvc.ViewPage<UsersViewModel>" %> 
... 
<%= Html.ListBoxFor(x => x.SelectedUsers, Model.AvailableUsers) %> 
+0

。它似乎工作正常,但我得到這個錯誤: 傳遞到字典中的模型項目的類型是'System.Collections.Generic.List'1 [SkyLearn.Areas.Users.Models.User]',但是這個字典需要一個'SkyLearn.Areas.Users.Models.UsersViewModel'類型的模型項目。 – AronChan 2012-04-12 11:59:55

+0

@AronChan,錯誤消息似乎很自我解釋。你的視圖被強制類型爲'List ',並且你傳遞一個'UsersViewModel'給它。所以你需要調整你的視圖模型。 – 2012-04-12 16:26:32

+0

有意詳細點Darin?不完全確定我應該如何改變我的模型 – AronChan 2012-04-12 17:08:42