2009-06-24 1 views
1

Ich habe folgendes Problem:Abrufen von Daten von Html.DropDownList() im Controller (ASP MVC) | Zeichenfolge zurückgegeben?

Ich habe ein Formular in site/banen (derzeit lokal laufenden Webserver), die eine SQL-Datenbank verwendet. Die Verbindung wird mit ADO.net hergestellt und ist in der Steuerung in der folgenden Art und Weise instanziiert:

DBModelEntities _entities; 
_entities = new DBModelEntities(); // this part is in the constructor of the controller. 

Als nächstes benutze ich diese Datenbank eine Html.DropDownList() meiner Meinung nach zu füllen. Dies geschieht in zwei Schritten. Auf der Steuerungsseite haben wir im Konstruktor:

ViewData["EducationLevels"] = this.GetAllEducationLevels(); 

und eine Hilfsmethode:

public SelectList GetAllEducationLevels() 
{ 
    List<EducationLevels> lstEducationLevels = _entities.EducationLevels.ToList(); 
    SelectList slist = new SelectList(lstEducationLevels, "ID", "Name"); 
    return slist; 
} 

Aus Sicht habe ich die folgenden:

<% using (Html.BeginForm()) {%> 

    <fieldset> 
     <legend>Fields</legend> 

     <!-- various textfields here --> 

     <p> 
      <label for="EducationLevels">EducationLevels:</label> 
      <!-- <%= Html.DropDownList("EducationLevels", ViewData["EducationLevels"] as SelectList)%> --> 
      <%= Html.DropDownList("EducationLevels", "..select option..")%> 
     </p> 
     <p> 
      <input type="submit" value="Create" /> 
     </p> 
    </fieldset> 

<% } %> 

Nun wird die Form gemacht richtig, wenn ich auf die Erstellungsseite blättern. Ich kann usw. auswählen. Aber wenn ausgewählt, muss ich diesen Wert verwenden, um in meinem neuen Modell zu speichern, um es in die Datenbank hochzuladen. Hier läuft es schief. Ich habe den folgenden Code in meinem Controller zu tun:

// 
    // POST: /Banen/Create 

    [AcceptVerbs(HttpVerbs.Post)] 
    public ActionResult Create(FormCollection form) 
    { 
     // set rest of information which has to be set automatically 
     var vacatureToAdd = new Vacatures(); 
     //vacatureToAdd.EducationLevels = form["EducationLevels"]; 

     // Deserialize (Include white list!) 
     TryUpdateModel(vacatureToAdd); 

     // Validate 
     if (String.IsNullOrEmpty(vacatureToAdd.Title)) 
      ModelState.AddModelError("Title", "Title is required!"); 
     if (String.IsNullOrEmpty(vacatureToAdd.Content)) 
      ModelState.AddModelError("Content", "Content is required!"); 

     // Update the variables not set in the form 
     vacatureToAdd.CreatedAt = DateTime.Now;     // Just created. 
     vacatureToAdd.UpdatedAt = DateTime.Now;     // Just created, so also modified now. 
     vacatureToAdd.ViewCount = 0;       // We have just created it, so no views 
     vacatureToAdd.ID = GetGuid();       // Generate uniqueidentifier 

     try 
     { 
      // TODO: Add insert logic here 
      _entities.AddToVacatures(vacatureToAdd); 
      _entities.SaveChanges(); 

      // Return to listing page if succesful 
      return RedirectToAction("Index"); 
     } 
     catch (Exception e) 
     { 
      return View(); 
     } 
    } 
    #endregion 

er den Fehler gibt:

alt text http://www.bastijn.nl/zooi/error_dropdown.png

Ich habe verschiedene Themen auf diese gefunden, aber alle sagen, dass Sie nur durch Verwendung abrufen können:

vacatureToAdd.EducationLevels = form["EducationLevels"]; 

Obwohl dies eine Zeichenfolge für mich zurückgibt. Da ich neu bei ASP.net bin, glaube ich zu vergessen zu sagen, dass ich das zurückzugebende Objekt und nicht eine Zeichenfolge auswählen soll. Vielleicht ist dies der selectedValue in dem Teil, wo ich meine SelectList mache, aber ich kann nicht herausfinden, wie ich das richtig einstellen soll. Natürlich kann ich auch auf einem Sidetrack komplett sein.

Hinweis: derzeit denke ich über ein separates Modell wie here.

Jede Hilfe wird geschätzt.

Antwort

1

Sie können kein Objekt aus dem üblichen <SELECT> Tag zurückgeben, das von der Html.DropDownList() - Methode gerendert wird, aber nur die String-Variable könnte zurückgegeben werden. In Ihrem Fall wird die ID des EducationLevels-Objekts an den Server gesendet. Sie sollten eine weitere benutzerdefinierte Hilfsmethode definieren und verwenden, um dieses Objekt anhand der ID zu rekonstruieren.

+0

Danke, ich habe es vorher gemacht, dachte aber, ich hätte eine seltsame Zeichenfolge zurückgegeben. Aber nachdem du das gesagt hast, habe ich mich daran erinnert, dass ich den Unique Identifier natürlich als String bekommen habe. Deshalb ist es falsch gelaufen. Erwartete eine Nummer oder einen Namen, erhielt aber die eindeutige Kennung. – bastijn

Verwandte Themen