Asp.net-Mvc
MVC DropDownList SelectedValue 未正確顯示
我嘗試搜尋並沒有找到任何可以解決我的問題的東西。我在 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)