我遇到这个问题是我正在设置包含所选项目的选择列表。 在 GET 请求中,选择列表已填充,但所选项目未设置。 在 POST 请求时,选择列表将填充新的选定值。
两个 ActionResult 函数的代码与视图相同(都使用相同的视图)。
这是我的学生课程的一部分
public IEnumerable<SelectListItem> Titles { get; set; }
这是我控制器中的代码:
public ActionResult Index()
{
Student student = _dB.Students.Where(std => std.AccountID == accountID).FirstOrDefault();
student.Titles = new SelectList(_dB.Titles, "Id", "Description", student.Title);
return View(student);
}
[HttpPost]
public ActionResult Index(Student student)
{
if (ModelState.IsValid)
{
Student studentSave = _dB.Students.Where(stud => stud.StudentID == student.StudentID).FirstOrDefault();
studentSave.Name = student.Name;
studentSave.Surname = student.Surname;
studentSave.Email = student.Email;
studentSave.Title = student.Title;
studentSave.DOB = student.DOB;
studentSave.Telnum = student.Telnum;
studentSave.AddressLine1 = student.AddressLine1;
studentSave.AddressLine2 = student.AddressLine2;
studentSave.Town = student.Town;
studentSave.PostCode = student.PostCode;
studentSave.Country = student.Country;
_dB.SaveChanges();
}
ViewBag.Submitted = true;
student.Titles = new SelectList(_dB.Titles, "Id", "Description", student.Title);
return View(student);
}
这是我视图中的代码
@Html.DropDownList("Title", Model.Titles, new { @class = "form-control shadow-none" })
@Html.ValidationMessageFor(model => model.Title, "", new { @class = "text-danger" })
调试到
Html.DropDownList
时,值会正确传递,但在渲染时未设置所选项目(执行 GET 请求时)。
我尝试了各种填充选择列表的方法,所有方法都呈现了相同的结果。
有人经历过类似的事情吗?
您需要为
Title
的第四个参数提供
DropDownList(String, String, IEnumerable<SelectListItem>, Object, Object)
值。
@Html.DropDownList("Title",
"",
Model.Titles,
Model.Title,
new { @class = "form-control shadow-none" })
Html.DropDownListFor
将 Title
值绑定到下拉列表。
@Html.DropDownListFor(model => model.Title,
Model.Titles,
new { @class = "form-control shadow-none" })
我认为错误来自于您对 selectList 的初始化,您将数据值指定为“Id”,但随后您说所选值是整个对象
student.Title
您应该尝试这个new SelectList(_dB.Titles, "Id", "Description", student.Title.Id)