Asp.net-Mvc-3

下拉列表在 MVC3 Razor 中設置選定值

  • July 24, 2011

這是我的模型:

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
)

引用自:https://stackoverflow.com/questions/6807256