我一直在关注this教程,该教程向您展示如何填充下拉列表。但是,我的创建页面根本没有显示下拉列表,但显示了此
这是我的UserController.cs中的下拉列表代码
private void PopulateAdministratorsDropDownList(object selectedAdministrator = null)
{
var administratorQuery = from d in db.Administrators
orderby d.AdministratorTitle
select d;
ViewBag.AdministratorID = new SelectList(administratorQuery, "AdministratorID", "AdministratorTitle", selectedAdministrator);
}
视图\用户\ Create.cshtml
@model RecreationalServicesTicketingSystem.Models.User
....
@using (Html.BeginForm()) {
@Html.AntiForgeryToken()
@Html.ValidationSummary(true)
<fieldset>
<legend>User</legend>
<div class="editor-label">
@Html.LabelFor(model => model.LastName)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.LastName)
@Html.ValidationMessageFor(model => model.LastName)
</div>
.... // more controls
<div class="editor-label">
@Html.LabelFor(model => model.AdministratorID)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.AdministratorID)
@Html.ValidationMessageFor(model => model.AdministratorID)
</div>
....
<p>
<input type="submit" value="Create" />
</p>
</fieldset>
}
UserController.cs
public ActionResult Create()
{
PopulateAdministratorsDropDownList();
return View();
}
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Create([Bind(Include = "LastName, FirstMidName, EnrollmentDate,AdministratorID, DepartmentID, DepotID")]User user)
{
try
{
if (ModelState.IsValid)
{
db.Users.Add(user);
db.SaveChanges();
return RedirectToAction("Index");
}
}
catch (DataException /* dex */)
{
ModelState.AddModelError("", "Unable to save changes. Try again, and if the problem persists see your system administrator.");
}
PopulateAdministratorsDropDownList(user.AdministratorID);
return View(user);
}
private void PopulateAdministratorsDropDownList(object selectedAdministrator = null)
{
var administratorQuery = from d in db.Administrators
orderby d.AdministratorTitle
select d;
ViewBag.AdministratorID = new SelectList(administratorQuery, "AdministratorID", "AdministratorTitle", selectedAdministrator);
}
答案 0 :(得分:3)
你说你跟着啧啧,但你并没有完全遵循它。而是在想要下拉列表时使用@Html.DropDownListFor
。
在您发布的链接中,他们使用以下内容进行Department
下拉列表;像这样:
<div class="editor-label">
@Html.LabelFor(model => model.DepartmentID, "Department")
</div>
<div class="editor-field">
@Html.DropDownList("DepartmentID", String.Empty)
@Html.ValidationMessageFor(model => model.DepartmentID)
</div>
但你的看起来像是:
<div class="editor-label">
@Html.LabelFor(model => model.AdministratorID)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.AdministratorID)
@Html.ValidationMessageFor(model => model.AdministratorID)
</div>
他们不等同。
附注:您所遵循的教程未遵循最佳做法(使用强类型DropDownListFor()
方法),并且使用DropDownList()
也意味着您未获得任何客户端验证(如果您检查生成的html,您会注意到data-val-*
标记中没有<select>
个属性。相反,使用
@Html.DropDownListFor(m => m.AdministratorID, (SelectList)ViewBag.AdministratorList, "Please select")
并更改ViewBag属性的名称(它不能与您绑定的属性名称相同)
ViewBag.AdministratorList = new SelectList(administratorQuery, "AdministratorID", "AdministratorTitle")