У меня следующая проблема:
У меня есть форма в site / banen (в настоящее время локально работающий веб-сервер), которая использует базу данных SQL. Ссылка сделана с использованием ADO.net и создается в контроллере следующим образом:
DBModelEntities _entities;
_entities = new DBModelEntities(); // this part is in the constructor of the controller.
Далее я использую эту базу данных для заполнения Html.DropDownList () в моем представлении. Это делается в два этапа. На стороне контроллера мы имеем в конструкторе:
ViewData["EducationLevels"] = this.GetAllEducationLevels();
и вспомогательный метод:
public SelectList GetAllEducationLevels()
{
List<EducationLevels> lstEducationLevels = _entities.EducationLevels.ToList();
SelectList slist = new SelectList(lstEducationLevels, "ID", "Name");
return slist;
}
В представлении у меня есть следующее:
<% 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>
<% } %>
Теперь форма отображается правильно, когда я перехожу на страницу создания. Я могу выбрать и т. Д. Но при выборе я должен использовать это значение, чтобы сохранить в моей новой модели для загрузки в базу данных. Вот где это идет не так. У меня есть следующий код для этого в моем контроллере:
//
// 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
выдает ошибку:
альтернативный текст http://www.bastijn.nl/zooi/error_dropdown.png
Я нашел разные темы на эту тему, но все говорят, что вы можете получить, просто используя:
vacatureToAdd.EducationLevels = form["EducationLevels"];
Хотя это возвращает мне строку. Так как я новичок в ASP.net, я думаю, что забыл сказать, чтобы выбрать объект для возврата, а не строку. Может быть, это selectedValue в той части, где я делаю свой SelectList, но я не могу понять, как правильно установить это. Конечно, я также могу быть в стороне.
Sidenote: в настоящее время я думаю о том, чтобы иметь отдельную модель, такую как здесь .
Любая помощь приветствуется.