我尝试搜索,没有找到任何解决问题的东西。我在Razor视图中有一个DropDownList,它不会显示在SelectList中标记为Selected的项目。这是填写列表的控制器代码:
var statuses = new SelectList(db.OrderStatuses,"ID","Name",order.Status.ID.ToString()); ViewBag.Statuses = statuses; return View(vm);@H_404_4@这是查看代码:
<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>@H_404_4@我走过它,即使在视图中它具有正确的SelectedValue,但是DDL始终显示列表中的第一个项目,而不管选择的值如何。任何人都可以指出我做错了什么来让DDL默认为SelectValue?
解决方法
SelectList构造函数(希望能够传递所选值id)的最后一个参数被忽略,因为DropDownListFor Helper使用您作为第一个参数传递的lambda表达式,并使用特定属性的值。
@H_404_4@所以这是丑陋的方法:
@H_404_4@模型:
public class MyModel { public int StatusID { get; set; } }@H_404_4@控制器:
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" },},"Name" ); ViewBag.Statuses = statuses; var model = new MyModel(); model.StatusID = 3; // preselect the element with ID=3 in the list return View(model); } }@H_404_4@视图:
@model MyModel ... @Html.DropDownListFor(model => model.StatusID,(SelectList)ViewBag.Statuses)@H_404_4@这是正确的方式,使用真实的视图模型: @H_404_4@模型
public class MyModel { public int StatusID { get; set; } public IEnumerable<SelectListItem> Statuses { get; set; } }@H_404_4@控制器:
public class HomeController : Controller { public ActionResult Index() { // TODO: obvIoUsly this comes from your DB,"Name" ); var model = new MyModel(); model.Statuses = statuses; model.StatusID = 3; // preselect the element with ID=3 in the list return View(model); } }@H_404_4@视图:
@model MyModel ... @Html.DropDownListFor(model => model.StatusID,Model.Statuses)