Alex
Alex

Reputation: 133

How to populate an dropdownlistfor from database in ASP.NET MVC 4

As the title says I'm looking for some help in that task, I've read many tutorials about it but none of them can solved my problem which is how to load a dropdownlistfor from database. By far, I got the following code:

**LNClientes():**

public List<ENDistrito> DistritoListar()
{
    return new ADClientes().DistritoListar();
}

**ADClientes():**

public List<ENDistrito> DistritoListar()
        {
            Database oDatabase =                      DatabaseFactory.CreateDatabase(ConfigurationManager.AppSettings["conexionBD"]);
            DbCommand odbcommand = oDatabase.GetStoredProcCommand("USP_SEL_DISTRITOS");

            List<ENDistrito> lista = new List<ENDistrito>();
            using (IDataReader reader = oDatabase.ExecuteReader(odbcommand))
            {
                while (reader.Read())
                    lista.Add(new ENDistrito(reader));
            }
            return lista;
        }

**Controller:**

 public ActionResult Registrar()
        {
            ViewBag.Message = Resources.Language.Title_Page_MC_C;
            var ListaDistrito = new LNClientes().DistritoListar();
            ViewBag.ObtenerDistrito = new SelectList(ListaDistrito, "IdDistrito", "DescripcionDistrito");
            return View();
        }

View:

<div class="editor-field">
            @Html.EditorFor(model => model.DistritoCliente)
            @Html.DropDownListFor(model => model.DistritoCliente,(SelectList)ViewBag.ObtenerDistrito,"--Seleccione--")
            @Html.ValidationMessageFor(model => model.DistritoCliente)
        </div>

Till this point everything is ok, when i open that form the dropdownlistfor works but when i submit the form i got the following message:

There is no ViewData item of type 'IEnumerable' that has the key 'DistritoCliente'.

Any idea on what I'm doing wrong or how could i solve this problem.

Thanks in advance.

Alex

Upvotes: 8

Views: 18843

Answers (2)

Raja Sekhar
Raja Sekhar

Reputation: 99

Controller:

ViewBag.States = new SelectList(db.States, "StateID", "StateName");

View: (In your view write the code for dropdown like this)

@Html.DropDownListFor(m => m.Address.StateID,ViewBag.States as SelectList,"--Select State--")

--> Here Address in one of the tables in my database having StateID as one of its properties

This one worked perfectly for me.. Try it!!

Upvotes: 4

Matt Bodily
Matt Bodily

Reputation: 6423

How I commonly build my dropdowns are like this

@Html.DropDownListFor(x => x.Field, PathToController.GetDropDown())

and then in your controller have a method built like this

public static List<SelectListItem> GetDropDown()
    {
        List<SelectListItem> ls = new List<SelectListItem>();
        lm = (call database);
        foreach (var temp in lm)
        {
            ls.Add(new SelectListItem() { Text = temp.name, Value = temp.id });
        }
        return ls;
    }

Hopefully it helps.

Upvotes: 20

Related Questions