2013-10-24 81 views
0

我似乎無法破解如何通過DropDownListFor通過我的模型類, 我只能夠計算如何使用標準dropdownlist。我會後我如何做了它過去傳遞DropDownListFor通過模型類

public class NewLogin 
{ 
    public string UserRole  { get; set; } 
    public int RoleID   { get; set; } 
    public SelectList RoleList { get; set; } 
} 

這裏是我應得的數據,我在我的LinQ聲明DDL,是否有這樣做的更有效的方法?

public NewLogin PopUserDDL() 
    { 
     NewLogin nl = new NewLogin(); 
     using (database db = new database()) 
     {          
      nl.RoleList = new SelectList(GetRolesForDDL(), "RoleID", "UserRole");     
     } 
     return nl;  
    } 
    public List<NewLogin> GetRolesForDDL() 
    { 
     using (database db = new database()) 
     { 
      return (from r in db.UserRole      
        select new NewLogin 
        { 
         UserRole = r.Role, 
         RoleID = r.RoleID 
        }).ToList(); 
     } 
    } 

我稱它在我看來,像
@Html.DropDownList("lstRoles",(SelectList)ViewBag.RolesList)

而我路過它像

public ActionResult Index(NewLogin newlogin, int lstRoles) 
    { 
    } 

我試過下拉並試圖讓它直接傳遞通過模型,但沒有任何運氣。 謝謝

+0

您是否在使用viewModel? –

+0

'但沒有任何運氣' - 這種表達方式對幫助您明確提出問題並沒有多大幫助** –

回答

2

Html.DropDownListFor要求您的視圖是強類型。如果你的模型是NewLogin型的,你可以寫這樣的:

@model MyNamespace.NewLogin 

@Html.DropDownListFor(model => model.RoleID, Model.RoleList) 

在您的文章的行動,你就會得到你的NewLogin參數選擇RoleID

編輯:在您的控制器,您呼叫的行動可能是這樣的:你的觀點

public ActionResult Index() 
{ 
    NewLogin newLogin = PopUserDDL(); 
    return View(newLogin); 
} 

Model屬性將包含你所需要的數據。這是一個比ViewBags更好的解決方案。

+0

好吧,我現在已經獲得了RoleID,如果我想要的話文本值以及RoleID如何選擇? – CSharper

+0

當您在下拉列表中選擇一個項目時,您會得到一個與其相關的值。在你的情況下,它是一個ID,如果你還想要文本值,你可能必須使用你得到的ID在'RoleList'中搜索它。你是否在你的觀點或你的發佈行動中需要它? –

+0

不,我想,如果我將來需要做類似的事情,但如果我也想,我可以使用JQuery來獲取它。現在,當我通過它我得到這個....角色id =「13」那麼UserRole和RoleList都是空的,這將工作按預期?最初我想這些都是我可以將RoleID和UserList作爲RoleList的子屬性的一種方式,所以在訪問它們時我可以做NewLogin.RoleList.RoleID,挑剔我知道,但我只是好奇而已。 – CSharper