asp.net-mvc – MVC DropDownList SelectedValue不正确显示

前端之家收集整理的这篇文章主要介绍了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 Helper使用您作为第一个参数传递的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" },},"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,"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)

猜你在找的asp.Net相关文章