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.
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