【发布时间】:2011-05-22 12:31:16
【问题描述】:
在数据库中,我有表用户和学生。我使用实体框架生成模型。由于生成的这个学生类只有来自学生的字段,但没有来自用户的字段,所以我创建了自己的学生类,其中包含所有这些字段,以便像 viewmodel 一样使用。
我正在使用我的 ViewBag 为我的视图中的下拉菜单传递数据。
ViewBag.Programs = Entities.Programs;
课程是大学的列表学习课程(例如:计算机科学、法律等...) 所以这是 1:N 的关系,学生可以只在一个程序上,但程序可以被更多的学生学习。 在我看来,当新学生添加到数据库时,我使用 DropDownFor 制作下拉列表,从中分配给学生的程序。
<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>
问题是当我点击表单提交按钮时,出现此错误:
异常详细信息:System.ArgumentNullException:值不能为空。 参数名称:来源
@Html.DropDownListFor(model => model.ProgramID, ((IEnumerable<SSVN.Models.Program>)ViewBag.Programs).Select(option => new SelectListItem
这部分model => model.ProgramID出错了
好吧,我试图简化问题,以便您没有其他不清楚的地方,所以我将我的代码翻译成英文,因为真正的代码更多地使用我的母语。 我认为存在错误,因为这就是浏览器所说的。这是原始代码:
编辑获取操作
// 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);
}
编辑帖子操作
// 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);
}
查看
@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>
【问题讨论】:
标签: asp.net-mvc asp.net-mvc-3 razor