2013-09-23 9 views
8

Wie der Titel sagt, ich suche nach Hilfe in dieser Aufgabe, habe ich viele Tutorials darüber gelesen, aber keine von ihnen kann mein Problem gelöst, das ist wie um eine dropdownlistfor aus der Datenbank zu laden. Bei weitem habe ich den folgenden Code:So füllen Sie eine Dropdown-Liste aus der Datenbank in ASP.NET MVC 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(); 
     } 

Ausblick:

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

bis zu diesem Punkt alles in Ordnung ist, wenn ich öffnen, die Form der dropdownlistfor funktioniert, aber wenn ich das Formular abschicken Ich habe die folgende Meldung:

Es gibt keinen Viewdata Artikel vom Typ ‚IEnumerable‘ dass die Taste ‚DistritoCliente‘ hat.

Irgendeine Idee auf, was ich falsch mache oder wie ich dieses Problem lösen könnte.

Vielen Dank im Voraus.

Alex

+0

Wie kommt es, dass Sie einen Datenleser verwenden, wenn Sie alle Ihre Daten gleichzeitig in einer Liste lesen? –

+0

Gibt http://stackoverflow.com/questions/2849341/there-is-no-viewdata-item-of-type-ienumerableselectlistitem-that-has-the-key dein Problem zu lösen? –

+0

Ich folgte dem Artikel und habe immer noch nicht mein Problem gelöst ~ ich habe einige Dinge wie im Controller geändert, indem ich das mache: ViewData ["Distritos"] = neue SelectList (neue LNClientes(). DistritoListar(), "IdDistrito", "DescripcionDistrito"); aber das Problem ist immer noch die Deklaration der Dropdown-Liste, die @ Html.DropDownListFor ist (Model => Model.DistritoCliente, ((SelectListItem) ViewData ["Distrito"])) aber es wirft Fehler der Argumente, jede andere Idee, es zu lösen – Alex

Antwort

18

Wie ich meine Dropdown-Listen häufig bauen ist wie dies

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

und dann in Ihrem Controller hat ein Verfahren wie dies Hoffentlich

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

gebaut, es hilft.

+0

Was ist PathToController? – Alex

+0

geben Sie den Namen Ihres Controllers ein und geben Sie ctrl- ein. das bringt den vollständigen Pfad zu deinem Controller (Projekt, Bereich, Controller, so etwas) –

+0

Endlich funktioniert es, danke für die Hilfe! – Alex

3

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--") 

-> Hier Adresse in einer der Tabellen in meiner Datenbank StateID als eine seiner Eigenschaften

Dieses perfekt für mich gearbeitet hat .. Versuchen Sie es !!

Verwandte Themen