Asp.net-Mvc-3
下拉列表在 MVC3 Razor 中設置選定值
這是我的模型:
public class NewsCategoriesModel { public int NewsCategoriesID { get; set; } public string NewsCategoriesName { get; set; } }我的控制器:
public ActionResult NewsEdit(int ID, dms_New dsn) { dsn = (from a in dc.dms_News where a.NewsID == ID select a).FirstOrDefault(); var categories = (from b in dc.dms_NewsCategories select b).ToList(); var selectedValue = dsn.NewsCategoriesID; SelectList ListCategories = new SelectList(categories, "NewsCategoriesID", "NewsCategoriesName",selectedValue); // ViewBag.NewsCategoriesID = new SelectList(categories as IEnumerable<dms_NewsCategory>, "NewsCategoriesID", "NewsCategoriesName", dsn.NewsCategoriesID); ViewBag.NewsCategoriesID = ListCategories; return View(dsn); }然後是我的看法:
@Html.DropDownList("NewsCategoriesID", (SelectList)ViewBag.NewsCategoriesID)當我執行時,
DropDownList不會選擇我設置的值。它總是選擇第一個選項。
您應該使用視圖模型並忘記
ViewBag它,就好像它不存在一樣。你會看到事情會變得多麼容易。所以定義一個視圖模型:public class MyViewModel { public int SelectedCategoryId { get; set; } public IEnumerable<SelectListItem> Categories { get; set; } }然後從控制器填充此視圖模型:
public ActionResult NewsEdit(int ID, dms_New dsn) { var dsn = (from a in dc.dms_News where a.NewsID == ID select a).FirstOrDefault(); var categories = (from b in dc.dms_NewsCategories select b).ToList(); var model = new MyViewModel { SelectedCategoryId = dsn.NewsCategoriesID, Categories = categories.Select(x => new SelectListItem { Value = x.NewsCategoriesID.ToString(), Text = x.NewsCategoriesName }) }; return View(model); }最後在您看來,使用強類型
DropDownListFor幫助器:@model MyViewModel @Html.DropDownListFor( x => x.SelectedCategoryId, Model.Categories )