Asp.net-Mvc

MVC DropDownList SelectedValue 未正確顯示

  • April 6, 2012

我嘗試搜尋並沒有找到任何可以解決我的問題的東西。我在 Razor 視圖上有一個 DropDownList,它不會顯示我在 SelectList 中標記為 Selected 的項目。這是填充列表的控制器程式碼:

var statuses  = new SelectList(db.OrderStatuses, "ID", "Name", order.Status.ID.ToString());
ViewBag.Statuses = statuses;
return View(vm);

這是查看程式碼:

<div class="display-label">
  Order Status</div>
<div class="editor-field">
  @Html.DropDownListFor(model => model.StatusID, (SelectList)ViewBag.Statuses)
  @Html.ValidationMessageFor(model => model.StatusID)
</div>

我遍歷它,即使在視圖中它具有正確的 SelectedValue 但是 DDL 始終顯示列表中的第一項,而不管所選值如何。誰能指出我做錯了什麼讓 DDL 預設為 SelectValue?

建構子的最後一個參數SelectList(您希望能夠在其中傳遞所選值 id)被忽略,因為 DropDownListFor 幫助器使用您作為第一個參數傳遞的 lambda 表達式並使用特定屬性的值。

所以這是一個醜陋的方法:

模型:

public class MyModel
{
   public int StatusID { get; set; }
}

控制器:

public class HomeController : Controller
{
   public ActionResult Index()
   {
       // TODO: obviously this comes from your DB,
       // but I hate showing code on SO that people are
       // not able to compile and play with because it has 
       // gazzilion of external dependencies
       var statuses = new SelectList(
           new[] 
           {
               new { ID = 1, Name = "status 1" },
               new { ID = 2, Name = "status 2" },
               new { ID = 3, Name = "status 3" },
               new { ID = 4, Name = "status 4" },
           }, 
           "ID", 
           "Name"
       );
       ViewBag.Statuses = statuses;

       var model = new MyModel();
       model.StatusID = 3; // preselect the element with ID=3 in the list
       return View(model);
   }
}

看法:

@model MyModel
...    
@Html.DropDownListFor(model => model.StatusID, (SelectList)ViewBag.Statuses)

這是使用真實視圖模型的正確方法:

模型

public class MyModel
{
   public int StatusID { get; set; }
   public IEnumerable<SelectListItem> Statuses { get; set; }
}

控制器:

public class HomeController : Controller
{
   public ActionResult Index()
   {
       // TODO: obviously this comes from your DB,
       // but I hate showing code on SO that people are
       // not able to compile and play with because it has 
       // gazzilion of external dependencies
       var statuses = new SelectList(
           new[] 
           {
               new { ID = 1, Name = "status 1" },
               new { ID = 2, Name = "status 2" },
               new { ID = 3, Name = "status 3" },
               new { ID = 4, Name = "status 4" },
           }, 
           "ID", 
           "Name"
       );
       var model = new MyModel();
       model.Statuses = statuses;
       model.StatusID = 3; // preselect the element with ID=3 in the list
       return View(model);
   }
}

看法:

@model MyModel
...    
@Html.DropDownListFor(model => model.StatusID, Model.Statuses)

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