【问题标题】:How to populate an dropdownlistfor from database in ASP.NET MVC 4如何在 ASP.NET MVC 4 中从数据库中填充下拉列表
【发布时间】:2015-07-31 04:10:16
【问题描述】:

正如标题所说,我正在为该任务寻求帮助,我已经阅读了很多关于它的教程,但没有一个可以解决我的问题,即如何从数据库加载 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();
        }

查看:

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

到目前为止一切正常,当我打开该表单时,dropdownlistfor 有效,但是当我提交表单时,我收到以下消息:

没有“IEnumerable”类型的 ViewData 项 有键 'DistritoCliente'。

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

提前致谢。

亚历克斯

【问题讨论】:

  • 当您一次将所有数据读入一个列表时,您为什么要使用数据阅读器?
  • stackoverflow.com/questions/2849341/… 能解决您的问题吗?
  • 我关注了这篇文章,但仍然没有解决我的问题~我改变了一些东西,比如在控制器中这样做:ViewData["Distritos"] = new SelectList(new LNClientes().DistritoListar(), "IdDistrito", "DescriptionDistrito");但问题仍然是下拉列表的声明,它是 @Html.DropDownListFor(Model=> Model.DistritoCliente,((SelectListItem)ViewData["Distrito"])) 但它会引发参数错误,解决它的任何其他想法

标签: asp.net-mvc-4


【解决方案1】:

我通常如何构建我的下拉菜单是这样的

@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;
    }

希望对您有所帮助。

【讨论】:

  • 什么是 PathToController?
  • 输入您的控制器名称并输入 ctrl-。这将带来您的控制器的完整路径(项目、区域、控制器等)
  • 很高兴为您提供帮助。您介意将我的答案标记为正确答案吗?
  • 我忘了一件事,如果想显示一个标有“选择一个项目”的标签呢?
  • 下拉列表的选项之一是下拉列表中的第一项。我不记得它是列表中的哪个项目。它可能只是... GetDropDown(), "Choose an item")
【解决方案2】:

控制器:

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 作为其属性之一

这个对我来说非常有效.. 试试看!!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-08
    • 1970-01-01
    • 1970-01-01
    • 2013-01-29
    • 1970-01-01
    • 2014-01-01
    相关资源
    最近更新 更多