C# 通过模型类传递DropDownListFor

C# 通过模型类传递DropDownListFor,c#,asp.net-mvc,linq,dropdownlistfor,C#,Asp.net Mvc,Linq,Dropdownlistfor,我似乎无法破解如何通过模型类传递DropDownListFor, 我只能用一个标准的dropdownlist来解决这个问题。我要发布我过去是怎么做的 public class NewLogin { public string UserRole { get; set; } public int RoleID { get; set; } public SelectList RoleList { get; set; } } 下面是我在LinQ语句中

我似乎无法破解如何通过模型类传递
DropDownListFor
, 我只能用一个标准的
dropdownlist
来解决这个问题。我要发布我过去是怎么做的

 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。DropDownListFor
要求您的视图是强类型的。如果您的模型类型为
NewLogin
,则可以这样编写:

@model MyNamespace.NewLogin

@Html.DropDownListFor(model => model.RoleID, Model.RoleList)
在post操作中,您将在
NewLogin
参数中选择
RoleID

编辑:在控制器中,您的调用操作可以是:

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

视图的
Model
属性将包含所需的数据。这是一个比
ViewBags

更好的解决方案。您是否使用了viewModel?
但没有任何运气
-这种表达方式对澄清您的问题并没有多大帮助,因此人们可以提供帮助好的,我现在得到了角色ID,如果我想得到文本值和RoleID,我怎么能选择呢?当你在下拉列表中选择一个项目时,你会得到一个与之关联的值。在您的情况下,它是一个ID,如果您还需要文本值,您可能需要使用您获得的ID在
RoleList
中搜索它。你是在你的观点中还是在你的后期行动中需要它?不,我不需要,但我在想,如果我将来需要做类似的事情,但是如果我也需要,我可以使用JQuery来获得它。现在当我把它传进来的时候,我得到了这个…Role id=“13”那么UserRole和RoleList都是空的,这会按预期工作吗?最初我想一定有一种方法可以让RoleList和UserList作为RoleList的子属性,所以当访问它们时,我可以使用NewLogin.RoleList.RoleID,挑剔我知道,但我只是好奇。+1表示“这是一个比ViewBag更好的解决方案”。就我个人而言,我希望微软能完全删除ViewBag。这是可怕的和可怕的过度使用。
public ActionResult Index()
{
    NewLogin newLogin = PopUserDDL();
    return View(newLogin);
}