簡體   English   中英

ASP.NET MVC DropDownList顯示“ Id”而不是“ Description”

[英]ASP.NET MVC DropDownList displaying “Id” instead of “Description”

我一直在用ASP.NET MVC做一些教程,並決定嘗試一些我還沒有看到的東西。

我有兩個表:“患者”和“分類”。 我希望能夠創建一個新的分類,然后當我創建或編輯新患者時,我可以選擇一個分類。

現在,以我的DropDownList中的內容為例,假設我有貓,狗和魚。 如果我選擇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; }
}

創建(患者)視圖:

        <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>

編輯(患者)視圖:

<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>

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

用類似下面的ViewBag.Classifications替換定義ViewBag.Classifications的控制器中的行:

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

應該這樣做。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM