C# 带有实体框架的MVC My DropDownList isn';不是下拉列表

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

我一直在学习教程,它向您展示了如何填充下拉列表。但是,我的“创建”页面根本不显示下拉列表,而是显示以下内容

这是我的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);
}
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")