Probleme mit ASP MVC + Html.DropDownList () unter Verwendung eines ModelView-Musters

Kürzlich habe ich eine Frage zur Dropdown-Liste des HTML-Helfers gestellt und sie funktioniert (Hier). Aber jetzt habe ich beschlossen, dass es viel klüger ist, auf ModelView-Muster umzusteigen, damit ich in meinen Ansichten auf stark typisierte Methoden usw. zugreifen kann. Ich habe in meinem anderen Thema einige Anpassungen am Code vorgenommen, und zwar folgendermaßen:

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>

Und meine Create.aspx-Ansicht (Teil davon):

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

Zum Führen habe ich das benutztNerdDinner Tutorial von ScottGu und ich haben hier verschiedene Themen gelesen.

Meine Frage ist, ob es möglich ist, MVC ASP mein Karrierelevel, Bildungslevel und meine Branche (Dropdown-Listen) automatisch festlegen zu lassen, da es derzeit eine ID-Zeichenfolge zurückgibt, die nicht meinen Wünschen entspricht. Wenn ich die Erstellung der SelectList ändere in:

<code>this.CareerLevels = new SelectList(repository.GetAllCareerLevels(), vacature.CareerLevels);
</code>

Ohne "ID" und "Name" wird also auch nichts gespeichert (ich denke, es wird immer noch als Zeichenfolge in der Post-Methode zurückgegeben und nicht das Objekt selbst) und daneben wird in der Ansicht Folgendes aufgeführt: vacature. EducationLevels usw. Es werden also nicht die Namen, sondern das Objekt selbst aufgelistet.

Letzte Frage Kurz gesagt, meine Frage ist, ob es möglich ist, mit diesem Ansatz meine Branche, mein Bildungsniveau und mein Karrierelevel festzulegen. Also nicht automatisch?

In diesem Fall muss ich noch Dinge verwenden wie:

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

In meinem Controller? Oder gibt es andere, glattere Möglichkeiten.

Antworten auf die Frage(3)

Ihre Antwort auf die Frage