2013-09-23 128 views
8

正如標題所示,我正在尋找一些有關該任務的幫助,我已經閱讀了許多關於它的教程,但沒有一個可以解決我的問題,從數據庫加載dropdownlistfor。到目前爲止,我得到了下面的代碼:如何在ASP.NET MVC中填充數據庫的dropdownlist 4

**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'。

任何想法,我做錯了什麼或我怎麼能解決這個問題。

在此先感謝。

亞歷

+0

當您只是一次將所有數據讀入列表中時,您如何使用數據讀取器? –

+0

是否http://stackoverflow.com/questions/2849341/there-is-no-viewdata-item-of-type-ienumerableselectlistitem-that-has-the-key解決你的問題? –

+0

我跟着文章,仍然沒有解決我的問題〜我改變了一些東西在控制器即時做這件事:ViewData [「Distritos」] =新的SelectList(新LNClientes()。DistritoListar(),「IdDistrito」,「DescripcionDistrito」 );但問題仍然是@ Html.DropDownListFor(Model => Model.DistritoCliente,((SelectListItem)ViewData [「Distrito」]))的下拉列表的聲明,但它會拋出參數的錯誤,任何其他想法來解決它 – Alex

回答

18

如何建立常用我的下拉菜單都是這樣

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

希望這有助於。

+0

什麼是PathToController? – Alex

+0

放入您的控制器名稱並鍵入ctrl-。這將帶來完整的路徑到您的控制器(項目,區域,控制器,類似的東西) –

+0

最後它的工作,感謝您的幫助! – Alex

3

控制器:

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作爲其屬性

之一這一個完美的工作,我在我的數據庫中的表的一個地址..試試吧!

相關問題