1

我正在用Entity Framework Database First構建一個簡單的ASP.NET MVC應用程序,它允許用戶編輯數據庫中的表。一個表有另一個表的外鍵。我希望用戶能夠更改外鍵值。如何從視圖中顯示「外部」表中的哪一列?

我的問題:如何選擇哪一列從「洋」表將顯示在視圖中的用戶?我把這個觀點支撐起來,但它顯示的是錯誤的列。

外鍵位於DealerAuto表中,該表具有以下列:DealerAutoID,DealerID,DealerMakeName,DealerModelName。出於某種原因,DealerAutoID視圖中的下拉列表正在拉入DealerMakeName中。我想要它拉DealerModelName。

Edit view

View.cshtml:

@model ModelYearChange.Models.DealerAutoTrim 

[...]

<div class="form-group"> 
     @Html.LabelFor(model => model.DealerAutoID, "DealerAutoID", new { @class = "control-label col-md-2" }) 
     <div class="col-md-10"> 
      @Html.DropDownList("DealerAutoID", String.Empty) 
      @Html.ValidationMessageFor(model => model.DealerAutoID) 
     </div> 
    </div> 

DealerAutoTrimController.cs:

public ActionResult Create() 
    { 
     ViewBag.DealerAutoID = new SelectList(db.DealerAutoes, "DealerAutoID", "DealerMakeName"); 
     ViewBag.DealerModelName = new SelectList(db.DealerAutoes, "DealerModelName", "DealerModelName"); 

     return View(); 
    } 

    // POST: /DealerAutoTrim/Create 
    // To protect from overposting attacks, please enable the specific properties you want to bind to, for 
    // more details see http://go.microsoft.com/fwlink/?LinkId=317598. 
    [HttpPost] 
    [ValidateAntiForgeryToken] 
    public ActionResult Create([Bind(Include = "DealerAutoTrimID,DealerAutoID,DealerTrimName,DealerTrimMSRP,DealerTrimMPG_City,DealerTrimMPG_Highway,DealerTrimBulletPoints,Year")] DealerAutoTrim dealerautotrim) 
    { 
     if (ModelState.IsValid) 
     { 
      db.DealerAutoTrims.Add(dealerautotrim); 
      db.SaveChanges(); 
      return RedirectToAction("Index"); 
     } 

     ViewBag.DealerAutoID = new SelectList(db.DealerAutoes, "DealerAutoID", "DealerMakeName", dealerautotrim.DealerAutoID); 
     return View(dealerautotrim); 
    } 
+0

你想怎樣,這是可能實現一個抽象的概念或做你想做的代碼?我不覺得你真的提供了足夠的信息來正確回答這個問題。我不知道你的對象是什麼,它們是如何映射的或它們是如何相關的。我不知道這個視圖是什麼樣的,或者它將如何使用。 –

+0

好主意,我會添加一些代碼。 :) – Derek

回答

2

你的列表綁定是一種搞砸:)

首先,你只需要一個SelectList解析到視圖。所以,在你的控制器,只需

ViewBag.DealerAutoes = SelectList(db.DealerAutoes, "DealerModelId", "DealerModelName"); 

注:第二的SelectList參數指定哪些領域將成爲下拉的「價值」,第三個參數定義什麼領域成爲「文本」的價值。

然後在你看來,你可以簡單地有:

@Html.DropDownListFor(m => m.DealerAutoId, (SelectList)ViewBag.DealerAutoes) 
+0

工程!謝謝。我在DropDownListFor中添加的一件事是Viewbag.DealerAutoes需要轉換爲SelectList。 – Derek

+0

沒問題 - 編輯過我的答案,包括演員。乾杯 – SlightlyMoist

相關問題