c# populate database - Populating a razor dropdownlist from a List<object> in MVC

3 Answers

  @Html.DropDownList("ddl",Model.Select(item => new SelectListItem
    Value = item.RecordID.ToString(),
    Text = item.Name.ToString(),
     Selected = "select" == item.RecordID.ToString()
with dynamic values

I have a model:

public class DbUserRole
        public int UserRoleId { get; set; }
        public string UserRole { get; set; }

public class DbUserRoles
        public List<DbUserRole> GetRoles()
            BugnetReports RoleDropDown = new BugnetReports();
            List<DbUserRole> Roles = new List<DbUserRole>();
            DataSet table = RoleDropDown.userRoleDropDown();
            foreach (DataRow item in table.Tables[0].Rows)
                DbUserRole ur = new DbUserRole();
                ur.UserRole = Convert.ToString(item["UserRoleName"]);
                ur.UserRoleId = Convert.ToInt32(item["UserRoleID"]);
            return Roles;

And here is the Controller that loads the view:

        // GET: /Admin/AddNewUser

        public ActionResult AddNewUser()
            DbUserRoles Roles = new DbUserRoles();
            return View(Roles.GetRoles());

I can get the items in the list to display using a @foreach loop as shown below:

@foreach (var item in Model)

But how do I populate a dropdownlist with the model that is passed through, I have tried

@Html.DropDownListFor(x => x.UserRole)

but I'm having no luck.

Something close to:

@Html.DropDownListFor(m => m.UserRole, 
   new SelectList(Model.Roles, "UserRoleId", "UserRole", Model.Roles.First().UserRoleId), 
   new { /* any html  attributes here */ }) 

You need a SelectList to populate the DropDownListFor. For any HTML attributes you need, you can add:

new { @class = "DropDown", @id = "dropdownUserRole" }

Your call to DropDownListFor needs a few more parameters to flesh it out. You need a SelectList as in the following SO question:

MVC3 DropDownListFor - a simple example?

With what you have there, you've only told it where to store the data, not where to load the list from.