Asp.net mvc 4 如何在ASP.NET MVC 4中从数据库填充DropDownList for

Asp.net mvc 4 如何在ASP.NET MVC 4中从数据库填充DropDownList for,asp.net-mvc-4,Asp.net Mvc 4,正如标题所说,我正在寻找这项任务的帮助,我已经阅读了许多关于这项任务的教程,但没有一本能够解决我的问题,即如何从数据库加载dropdownlistfor。到目前为止,我得到了以下代码: **LNClientes():** public List<ENDistrito> DistritoListar() { return new ADClientes().DistritoListar(); } **ADClientes():** public List<ENDist

正如标题所说,我正在寻找这项任务的帮助,我已经阅读了许多关于这项任务的教程,但没有一本能够解决我的问题,即如何从数据库加载
dropdownlistfor
。到目前为止,我得到了以下代码:

**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();
        }
**LNClientes():**
公共列表DistritoListar()
{
返回新的adclients().DistritoListar();
}
**ADClientes():**
公共列表DistritoListar()
{
Database oDatabase=DatabaseFactory.CreateDatabase(ConfigurationManager.AppSettings[“conexionBD”]);
DbCommand odbcommand=oDatabase.GetStoredProcCommand(“USP_SEL_DISTRITOS”);
List lista=新列表();
使用(IDataReader reader=oDatabase.ExecuteReader(odbcommand))
{
while(reader.Read())
添加(新的ENDistrito(读卡器));
}
返回列表a;
}
**控制器:**
公共行动结果登记处()
{
ViewBag.Message=Resources.Language.Title\u Page\u MC\u C;
var ListaDistrito=新的LNClientes().DistritoListar();
ViewBag.ObtenerDistrito=新选择列表(ListaDistrito,“IdDistrito”,“DescriptionDistrito”);
返回视图();
}
查看:

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

@EditorFor(model=>model.DistritoCliente)
@Html.DropDownListFor(model=>model.DistritoCliente,(SelectList)ViewBag.ObtenerDistrito,“--Seleccione-->”)
@Html.ValidationMessageFor(model=>model.DistritoCliente)
到目前为止,一切正常,当我打开该表单时,
dropdownlistfor
工作正常,但当我提交表单时,我收到以下消息:

没有类型为“IEnumerable”的ViewData项 具有“DistritoCliente”键

任何关于我做错了什么或者我如何解决这个问题的想法

提前谢谢


Alex

我通常是这样构建下拉列表的

@Html.DropDownListFor(x => x.Field, PathToController.GetDropDown())
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;
    }
然后在你的控制器中有这样一个方法

@Html.DropDownListFor(x => x.Field, PathToController.GetDropDown())
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;
    }
publicstaticlist GetDropDown()
{
列表ls=新列表();
lm=(调用数据库);
foreach(变量温度单位:lm)
{
添加(新SelectListItem(){Text=temp.name,Value=temp.id});
}
返回ls;
}
希望能有所帮助。

控制器:

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--")
-->这里是数据库中一个表中的地址,StateID是其属性之一


这个对我来说非常好。。试试看

当你一次将所有数据读入一个列表时,为什么要使用数据读取器?解决了你的问题吗?我读了这篇文章,但仍然没有解决我的问题~我改变了一些事情,比如在控制器中我这样做:ViewData[“Distritos”]=new SelectList(new LNClientes().DistritoListar(),“IdDistrito”,“DescriptionDistrito”);但问题仍然是dropdownlist的声明,它是@Html.DropDownListFor(Model=>Model.DistritoCliente,((SelectListItem)ViewData[“Distrito”])但它会抛出参数错误,还有其他解决方法吗PathToController是什么?输入控制器名称并键入ctrl-。这将带来控制器的完整路径(项目、区域、控制器等)很高兴为您提供帮助。您介意将我的答案标记为正确答案吗?我忘了一件事,如果要显示一个标签,上面写着“选择一个项目”,那该怎么办?DropDownList for的一个选项是下拉列表中的第一个项目。我不记得它是列表中的哪个项目。它可能只是…GetDropDown(),“选择一个项目”)