MVC ViewBag dropdown Werte-parameter übergeben

In der Datenbank habe ich die Tabelle user und student. Ich generierte Modell mit Entity Framework. Da dieser Schüler-Klasse erzeugt hatte nur die Felder von student, aber nicht in form Benutzer, habe ich meinen eigenen Studenten-Klasse mit allen dieser Felder zu verwenden, wie viewmodel.

Bin ich mit meinen ViewBag zum übergeben von Daten für die dropdown-aus meiner Sicht.

ViewBag.Programs = Entities.Programs;

Programme Liste der Studiengänge an der Universität (z.B.: informatik, Recht, etc...)
So es ist 1:N-Beziehung, wo die Schüler können in nur einem Programm, aber das Programm studiert werden kann, indem mehr Studenten.
Und meiner Ansicht nutze ich DropDownFor zu machen dropdown-Liste, aus der das Programm zugeordnet ist die Studierenden, wenn neue student wird zur Datenbank Hinzugefügt.

<div class="editor-field">
            @Html.DropDownListFor(model => model.ProgramID, ((IEnumerable<SSVN.Models.Program>)ViewBag.Programs).Select(option => new SelectListItem 
       {
        Text = (option == null ? "None" : option.Name), 
        Value = option.ID.ToString(),
        Selected = (Model != null) && (option.ID == Model.ID)
       }), "Choose...")
            @Html.ValidationMessageFor(model => model.ProgramID)
        </div>

Problem ist, wenn ich Sie auf Formular Absenden-button, wird dieser Fehler angezeigt:

Exception Details: System.ArgumentNullException: Wert darf nicht null sein.
Parameter name: source

@Html.DropDownListFor(model => model.ProgramID, ((IEnumerable<SSVN.Models.Program>)ViewBag.Programs).Select(option => new SelectListItem 

Diesem Teil model => model.ProgramID macht Fehler

Gut, ich habe versucht, zu vereinfachen problem damit, dass es keine anderen Dinge, die vielleicht unklar sein, so übersetzte ich meinen code auf Englisch, da der wirkliche code ist, mehr auf meine Muttersprache.
Ich denke der Fehler ist da, weil das ist, was der browser sagt. Hier ist der code, den es am original:

BEARBEITEN AKTION ZU ERHALTEN

//GET: /Unija/Studenti/Izmeni

        public ActionResult Izmeni(int ID)
        {
            ViewBag.StudProgrami = Entities.Studijski_Program;

            SSVN.ModelView.Student student = new SSVN.ModelView.Student();
            SSVN.Models.Student stud = Entities.Students.Single(x => x.ID == ID);
            Korisnik korisnik = Entities.Korisniks.Single(s => s.ID == ID);
            student.ID = korisnik.ID;
            student.KorisnickoIme = korisnik.Korisnicko_Ime;
            student.Lozinka = korisnik.Lozinka;
            student.Ime = stud.Ime;
            student.Prezime = stud.Prezime;
            student.BrojIndeksa = stud.Broj_Indeksa;
            student.TrenutniSemestar = stud.Trenutni_Semestar;
            student.StudijskiProgramID = stud.Studijski_Program_ID;

            return View(student);
        }

EDIT POST AKTION

//POST: /Unija/Studenti/Izmeni

        [HttpPost]
        public ActionResult Izmeni(SSVN.ModelView.Student student)
        {
            if (ModelState.IsValid)
            {
                Korisnik korisnikToUpdate = Entities.Korisniks.Single(x => x.ID == student.ID);
                korisnikToUpdate.Korisnicko_Ime = student.KorisnickoIme;
                korisnikToUpdate.Uloga_ID = Entities.Ulogas.SingleOrDefault(x => x.Naziv == "Student").ID;
                Entities.SaveChanges();

                SSVN.Models.Student studentToUpdate = Entities.Students.Single(x => x.ID == student.ID);
                studentToUpdate.Ime = student.Ime;
                studentToUpdate.Prezime = student.Prezime;
                studentToUpdate.Broj_Indeksa = student.BrojIndeksa;
                studentToUpdate.Trenutni_Semestar = student.TrenutniSemestar;
                studentToUpdate.Studijski_Program_ID = student.StudijskiProgramID;
                Entities.SaveChanges();

                return RedirectToAction("Index");
            }

            return View(student);
        }

ANSICHT

@model SSVN.ModelView.Student

@{
    ViewBag.Title = "Izmeni";
}

<h2>Dodaj</h2>

<script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script>

@using (Html.BeginForm()) {
    @Html.ValidationSummary(true)
    <fieldset>
        <legend>Student</legend>

        <div class="hidden-field">
        @Html.HiddenFor(model => model.ID)
        </div>

        <div class="editor-label">
            @Html.LabelFor(model => model.KorisnickoIme)
        </div>
        <div class="editor-field">
            @Html.EditorFor(model => model.KorisnickoIme)
            @Html.ValidationMessageFor(model => model.KorisnickoIme)
        </div>
        <input type="hidden" name="Lozinka" value="lozinka" />
        <div class="editor-label">
            @Html.LabelFor(model => model.Ime)
        </div>
        <div class="editor-field">
            @Html.EditorFor(model => model.Ime)
            @Html.ValidationMessageFor(model => model.Ime)
        </div>

        <div class="editor-label">
            @Html.LabelFor(model => model.Prezime)
        </div>
        <div class="editor-field">
            @Html.EditorFor(model => model.Prezime)
            @Html.ValidationMessageFor(model => model.Prezime)
        </div>

        <div class="editor-label">
            @Html.LabelFor(model => model.BrojIndeksa)
        </div>
        <div class="editor-field">
            @Html.EditorFor(model => model.BrojIndeksa)
            @Html.ValidationMessageFor(model => model.BrojIndeksa)
        </div>

        <div class="editor-label">
            @Html.LabelFor(model => model.TrenutniSemestar)
        </div>
        <div class="editor-field">
            @Html.EditorFor(model => model.TrenutniSemestar)
            @Html.ValidationMessageFor(model => model.TrenutniSemestar)
        </div>

        <div class="editor-label">
            @Html.LabelFor(model => model.StudijskiProgramID)
        </div>
        <div class="editor-field">
            @Html.DropDownListFor(model => model.StudijskiProgramID, ((IEnumerable<SSVN.Models.Studijski_Program>)ViewBag.StudProgrami).Select(option => new SelectListItem 
       {
        Text = (option == null ? "None" : option.Naziv), 
        Value = option.ID.ToString(),
        Selected = (Model != null) && (option.ID == Model.ID)
       }), "Izaberite")
            @Html.ValidationMessageFor(model => model.StudijskiProgramID)
        </div>

        <p>
            <input type="submit" value="Izmeni" />
        </p>
    </fieldset>
}

<div>
    @Html.ActionLink("Back to List", "Index")
</div>

InformationsquelleAutor Vajda | 2011-05-22

Schreibe einen Kommentar