проблемы с ASP MVC + Html.DropDownList () с использованием PatternView Pattern
Недавно я опубликовал вопрос о выпадающем списке html helper и заставил его работать (Вот). Но теперь я решил, что было намного разумнее переключаться на PatternView Patterns, поэтому у меня есть доступ к строго типизированным методам в моих представлениях и т. Д. Я сделал некоторые изменения в коде в другой теме следующим образом:
VacatureFormViewModel:
<code>public class VacaturesFormViewModel { public Vacatures Vacature { get; private set; } public SelectList EducationLevels { get; private set; } public SelectList Branches { get; private set; } public SelectList CareerLevels { get; private set; } Repository repository; // Constructor public VacaturesFormViewModel(Vacatures vacature) { this.Vacature = vacature; this.repository = new Repository(); this.EducationLevels = new SelectList(repository.GetAllEducationLevels(),"ID","Name",vacature.EducationLevels); this.Branches = new SelectList(repository.GetAllBranches(),"ID","Name",vacature.Branches); this.CareerLevels = new SelectList(repository.GetAllCareerLevels(), "ID", "Name", vacature.CareerLevels); } } </code>
BanenController:
<code>// // GET: /Banen/Create public ActionResult Create() { Vacatures vacature = new Vacatures(); return View(new VacaturesFormViewModel(vacature)); } // // POST: /Banen/Create [AcceptVerbs(HttpVerbs.Post)] public ActionResult Create(Vacatures vacatureToAdd) { if (ModelState.IsValid) { try { // TODO: Add insert logic here repository.AddToVacatures(vacatureToAdd); repository.SaveChanges(); // Return to listing page if succesful return RedirectToAction("Index"); } catch (Exception e) { return View(); } } } </code>
И мое представление Create.aspx (часть его):
<code><% using (Html.BeginForm()) {%> <fieldset> <legend>Fields</legend> <p> <label for="Title">Title:</label> <%= Html.TextBox("Title", Model.Vacature.Title) %> <%= Html.ValidationMessage("Title", "*") %> </p> <p> <label for="Content">Content:</label> <%= Html.TextArea("Content", Model.Vacature.Content) %> <%= Html.ValidationMessage("Content", "*") %> </p> <p> <label for="EducationLevels">EducationLevels:</label> <%= Html.DropDownList("EducationLevels", Model.EducationLevels)%> <%= Html.ValidationMessage("EducationLevels", "*") %> </p> <p> <label for="CareerLevels">CareerLevels:</label> <%= Html.DropDownList("CareerLevels", Model.CareerLevels)%> <%= Html.ValidationMessage("CareerLevels", "*")%> </p> <p> <label for="Branches">Branches:</label> <%= Html.DropDownList("Branches", Model.Branches)%> <%= Html.ValidationMessage("Branches", "*")%> </p> <p> <input type="submit" value="Save" /> </p> </fieldset> <% } %> </code>
Для руководства я использовалNerdDinner Учебник ScottGu, и я прочитал различные темы здесь.
Мой вопрос заключается в том, можно ли позволить MVC ASP автоматически устанавливать мой уровень карьеры, уровень образования и филиалы (выпадающие списки), так как в настоящее время он возвращает строку идентификатора, а это не то, что мне нужно. Когда я изменяю создание SelectList на:
<code>this.CareerLevels = new SelectList(repository.GetAllCareerLevels(), vacature.CareerLevels); </code>
Так что без & quot; ID & quot; и & quot; Имя & quot; он также не сохраняет (я полагаю, что он все еще возвращается как строка в методе post, а не сам объект), а рядом с ним он отображается в представлении как: vacature.EducationLevels и т. д. Так что не имена, а объект сам в списке.
Final question Итак, короче говоря, мой вопрос заключается в том, можно ли использовать этот подход для определения моих отраслевых, образовательных и карьерных уровней. Так не автоматически?
В этом случае я все еще должен использовать такие вещи, как:
<code>[AcceptVerbs(HttpVerbs.Post)] public ActionResult Create(FormCollection form) { Vacatures vacatureToAdd = new Vacatures(); // Retrieve the education level by its ID if (!form["EducationLevels"].Equals("")) { Guid educationID = new Guid(form["EducationLevels"]); vacatureToAdd.EducationLevels = repository.GetEducationLevelByID(educationID); } </code>
В моем контроллере? Или есть другие, более плавные варианты.