通过Model Class传递DropDownListFor

时间:2013-10-24 14:27:57

标签: c# asp.net-mvc linq dropdownlistfor

我似乎无法破解如何通过我的Model类传递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.DropDownList("lstRoles",(SelectList)ViewBag.RolesList)

我正在传递它

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

我尝试过下拉并试图直接通过模型,但没有任何运气。 谢谢

1 个答案:

答案 0 :(得分:2)

Html.DropDownListFor要求您的视图是强类型的。如果您的模型类型为NewLogin,则可以这样写:

@model MyNamespace.NewLogin

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

在您的帖子操作中,您会在RoleID参数中选择NewLogin

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

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

Model属性将包含您需要的数据。这是比ViewBags更好的解决方案。