C# ASP.NET MVC下拉列表显示“;Id";而不是",;说明“;

C# ASP.NET MVC下拉列表显示“;Id";而不是",;说明“;,c#,asp.net-mvc,C#,Asp.net Mvc,我一直在做一些ASP.NETMVC教程,并决定尝试一些我还没有见过的东西 我有两张表:病人表和分类表。我希望能够创建一个新的分类,然后当我创建或编辑一个新患者时,我可以选择一个分类 现在,作为我的下拉列表中的一个例子,让我们假设我有猫、狗和鱼。如果选择cat,则显示的值将为1,而不是实际的“cat” 我的问题是,这可以通过我拥有的代码实现,还是需要完全重写?如果你还有其他一般性的建议,请告诉我 我的控制器: private PatientContext db = new PatientConte

我一直在做一些ASP.NETMVC教程,并决定尝试一些我还没有见过的东西

我有两张表:病人表和分类表。我希望能够创建一个新的分类,然后当我创建或编辑一个新患者时,我可以选择一个分类

现在,作为我的下拉列表中的一个例子,让我们假设我有猫、狗和鱼。如果选择cat,则显示的值将为1,而不是实际的“cat”

我的问题是,这可以通过我拥有的代码实现,还是需要完全重写?如果你还有其他一般性的建议,请告诉我

我的控制器:

private PatientContext db = new PatientContext();
private ClassificationContext dbCC = new ClassificationContext();

    public ActionResult Index(string sortOrder)
    {
        return View();
    }

    public ActionResult Create([Bind(Include = "PatientId,First_Name,Last_Name,Address,City,State,Zipcode,Phone,ClassificationId")] Patient patient)
    {
        if (ModelState.IsValid)
        {
            db.Patients.Add(patient);
            db.SaveChanges();
            return RedirectToAction("Index");
        }
        ViewBag.Classifications = new SelectList(dbCC.Classifications, "ClassificationId", "Description");
        return View(patient);
    }

    public ActionResult Edit(int? id)
    {
        if (id == null)
        {
            return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
        }
        Patient patient = db.Patients.Find(id);
        if (patient == null)
        {
            return HttpNotFound();
        }
        ViewBag.Classifications = new SelectList(dbCC.Classifications, "ClassificationId", "Description");

        return View(patient);
    }
患者模型:

public class Patient
{
    public int PatientId { get; set; }

    [DisplayName("Classification")]
    public int ClassificationId { get; set; }
}
分类模式:

public class Classification
{
    public int ClassificationId { get; set; }

    public string Description { get; set; }
}
创建(患者)视图:


@LabelFor(model=>model.ClassificationId,新的{@class=“controllabel col-md-2”})
@*@EditorFor(model=>model.ClassificationId)*@
@Html.DropDownListFor(model=>model.ClassificationId,(IEnumerable)ViewBag.Classifications,“选择分类”)
@Html.ValidationMessageFor(model=>model.ClassificationId)
编辑(患者)视图:


@LabelFor(model=>model.ClassificationId,新的{@class=“controllabel col-md-2”})
@*@EditorFor(model=>model.ClassificationId)*@
@Html.DropDownListFor(model=>model.ClassificationId,(IEnumerable)ViewBag.Classifications,“选择分类”)
@Html.ValidationMessageFor(model=>model.ClassificationId)
索引(患者)视图:


@DisplayFor(modelItem=>item.ClassificationId)

您需要区分
SelectListItem.Text
(显示在下拉列表中)和
SelectListItem.Value
(绑定到您的模型的值)

将控制器中定义
ViewBag.classification
的行替换为以下内容:

ViewBag.Classifications = dbCC.Classifications
  .Select(c => new SelectListItem { Value = c.ClassificationId, Text = c.Description })
  .ToList(); 

应该这样做。

您的下拉值是显示数字而不是单词,还是仅显示患者视图?您正在该视图中使用item.ClassificationId而不是item.Description。实际单词将显示在下拉列表中。我无法在“患者”视图中使用item.Description,因此每个井都可能有问题。
<div class="form-group">
        @Html.LabelFor(model => model.ClassificationId, new { @class = "control-label col-md-2" })
        <div class="col-md-10">
            @*@Html.EditorFor(model => model.ClassificationId)*@
            @Html.DropDownListFor(model => model.ClassificationId,(IEnumerable<SelectListItem>)ViewBag.Classifications, "Select Classification")
            @Html.ValidationMessageFor(model => model.ClassificationId)
        </div>
    </div>
        <td>
        @Html.DisplayFor(modelItem => item.ClassificationId)
       </td>
ViewBag.Classifications = dbCC.Classifications
  .Select(c => new SelectListItem { Value = c.ClassificationId, Text = c.Description })
  .ToList();