C# 带有实体框架的MVC My DropDownList isn';不是下拉列表
我一直在学习教程,它向您展示了如何填充下拉列表。但是,我的“创建”页面根本不显示下拉列表,而是显示以下内容 这是我的UserController.cs中的下拉列表代码C# 带有实体框架的MVC My DropDownList isn';不是下拉列表,c#,html,asp.net-mvc,entity-framework,C#,Html,Asp.net Mvc,Entity Framework,我一直在学习教程,它向您展示了如何填充下拉列表。但是,我的“创建”页面根本不显示下拉列表,而是显示以下内容 这是我的UserController.cs中的下拉列表代码 private void PopulateAdministratorsDropDownList(object selectedAdministrator = null) { var administratorQuery = from d in db.Administrators
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);
}
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);
}
Views\User\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>
}
你说你在跟随图坦卡蒙,但你没有完全跟随它。当您想要获得下拉列表时,请使用
@Html.DropDownListFor
在您发布的链接中,他们在部门
下拉列表中使用以下内容:;像这样:
<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>
并更改ViewBag属性的名称(它不能与绑定到的属性同名)
将其更改为
@Html.DropDownListFor(m=>m.AdministratorID,(SelectList)ViewBag.AdministratorList)
-不需要更改ViewBag
属性的名称-它不能与绑定到的属性同名。@Html.DropDownListFor(model=>model.AdministratorID,(SelectList)ViewBag.AdministratorID)
还要注意的是,在选择列表
构造函数中添加最后一个参数(selectedAdministrator
)是没有意义的-它在绑定到模型属性时被HtmlHelper忽略。这是因为他们通常用黄色突出显示需要更改的代码,但他们没有这样做。@JasonWan,鉴于imgs,这似乎是一个有效的声明。@StephenMuecke我不介意你用强类型版本发表评论。当然,我不希望我的编码有不好的实践@Html.DropDownListFor(m=>m.AdministratorID,(SelectList)ViewBag.AdministratorList)
强类型?@chieftwoils当然!您已经回答了我的问题,这已经足够了。@ChiefTwoPencils,我意识到您只是在遵循教程中的代码,因此我对您的回答进行了编辑,以包含“最佳”实践:)(尽管最佳实践还包括使用带有IEnumerable AdministratorList
的视图模型,而不是使用ViewBag
)
<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>
@Html.DropDownListFor(m => m.AdministratorID, (SelectList)ViewBag.AdministratorList, "Please select")
ViewBag.AdministratorList = new SelectList(administratorQuery, "AdministratorID", "AdministratorTitle")