想法:
1.在做網站的時候,想把Category(類別)轉換成DropDownList撈出現有項目供使用者使用,所以使用ViewBag,把List放入ViewBag.CategoryId中,這樣 View 就可以取得資料。
2.當使用者改變DropDownList的value時可以submit至資料庫
實作:
本質上SelectList 其實就是 IEnumerable,而且 SelectList 的設定方式更加的簡單
Controller:
public ActionResult Edit(int Id) { using (CartsEntities db = new CartsEntities()) { //ProductSet內的Id = 輸入的Id 的值 var result = (from s in db.ProductSet where s.Id == Id select s).FirstOrDefault(); //抓Category的資料傳到Viewbag做DropDownList int CId = (from s in db.ProductSet where s.Id == Id select s.CategoryId).FirstOrDefault(); var CN = (from o in db.CategorySet select o).ToList(); ViewBag.CategoryId = new SelectList(CN, "Id", "Name", CId); if (result != default(Product)) //如果Result有抓到資料 { return View(result); //回傳Result的View } else { TempData["ResultMessage"] = "資料有誤,請重新操作"; return RedirectToAction("Index"); } } }
在這邊使用的SelectList建構函式是使用
SelectList 建構函式 (IEnumerable, String, String, Object)
所以DropDownList的值一開始就會指定為資料庫內所存的類別囉!
View:
這邊的 Html.DropDownList 方法中就只需要去設定 ViewBag 的名稱「CategoryId」就可以了。
顯示結果:
那要怎麼當使用者改變DropDownList的value時可以submit至資料庫呢?
Controller:
[HttpPost] //限定Post方法 public ActionResult Edit(Product postback) { if(this.ModelState.IsValid)//判斷使用者資料是否正確 { using(CartsEntities db = new CartsEntities()) { //抓Category的資料傳到Viewbag做DropDownList int CId = (from s in db.ProductSet where s.Id == postback.Id select s.CategoryId).FirstOrDefault(); var CN = (from o in db.CategorySet select o).ToList(); ViewBag.CategoryId = new SelectList(CN, "Id", "Name", CId); //ProductSet內的Id = postback的Id 的值 var result = (from s in db.ProductSet where s.Id == postback.Id select s).FirstOrDefault(); //儲存使用者變更資料 result.Name = postback.Name; result.Price =postback.Price; result.PublishDate=postback.PublishDate; result.Quantity=postback.Quantity; result.Status=postback.Status; result.CategoryId =postback.CategoryId ; result.DefaultImageId = postback.DefaultImageId; result.Description = postback.Description; result.DefaultImageURL = postback.DefaultImageURL; //存檔 db.SaveChanges(); TempData["ResultMessage"] = String.Format("商品{0}已編輯成功",postback.Name); return RedirectToAction("Index"); } } else { return View(postback); } }
其實重點就是
result.CategoryId =postback.CategoryId ;
當使用者選取DropDownList時,Value改變後,按下Submit會把"CategoryId"給postback回去,再存入db內就OK囉!
顯示結果:
選擇"類別2″並按下Save後,可以看到類別已經被改成2囉!
參考資料:ASP.NET MVC 3 – DropDownList 的基本設定方式 ,講得非常詳細,把DropDownList的各種使用方法的詳細說明了一遍,令我受益匪淺。