Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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

like image 639
Alex Avatar asked Sep 23 '13 15:09

Alex


2 Answers

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.

like image 120
Matt Bodily Avatar answered Nov 09 '22 21:11

Matt Bodily


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!!

like image 26
Raja Sekhar Avatar answered Nov 09 '22 23:11

Raja Sekhar