[ASP.NET MVC]使用Html.DropDownList直接指定SelectList 的 ViewBag名稱

想法:

1.在做網站的時候,想把Category(類別)轉換成DropDownList撈出現有項目供使用者使用,所以使用ViewBag,把List放入ViewBag.CategoryId中,這樣 View 就可以取得資料。

2.當使用者改變DropDownList的value時可以submit至資料庫

實作:

SelectList類別

本質上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)

image25255b8625255d1

所以DropDownList的值一開始就會指定為資料庫內所存的類別囉!

View:

DDL1

這邊的 Html.DropDownList 方法中就只需要去設定 ViewBag 的名稱「CategoryId」就可以了。

顯示結果:

DDL2

DDL3


那要怎麼當使用者改變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囉!

顯示結果:

DDL4

DDL5

選擇"類別2″並按下Save後,可以看到類別已經被改成2囉!

參考資料ASP.NET MVC 3 – DropDownList 的基本設定方式 ,講得非常詳細,把DropDownList的各種使用方法的詳細說明了一遍,令我受益匪淺。

發表留言