未在选择列表的下拉列表中设置选定值

本文关键字:设置 下拉列表 选择 列表 | 更新日期: 2023-09-27 18:18:09

MVC下拉列表…基本上是我生存的祸根…

我看过很多关于这个问题的话题,但是我在这里和网上找到的所有东西都没有解决我的问题。

先来点背景知识:我有一个允许用户编辑记录的页面。编辑页面上的其中一个字段是一个填充了客户端的下拉列表。要进入编辑页面,用户从另一个页面单击edit链接,该页面上有一个记录表。当他们到达编辑页面时,表单中填充了要编辑的所选记录的信息。除了登录屏幕,这可能是任何网站移动数据的最基本和最常见的功能之一。

那么,下面是View的代码:

@Html.DropDownList("ClientsDropdown", (IEnumerable<SelectListItem>)ViewBag.ClientsDropdown, "Select a Client")

这里是Controller中的代码:

[HttpGet]
    public ViewResult Details(int id, int pageNumber = 1)
    {
        Invoice invoice = db.Invoices.Find(id);
        FillClientDropdown(invoice);
        var model = new InvoiceDetailsModel() { Invoice = invoice, PageNumber = pageNumber };
        return View(model);
    }

和FillClientDropdown(invoice)调用:

private void FillClientDropdown(Invoice invoice)
    {
        var clientList = db
            .Clients
            .OrderBy(x => x.Name)
            .ToList()
            .Select(x => new SelectListItem
            {
                Selected = (x.ID == invoice.ClientOcrStringID),
                Text = x.Name,
                Value = x.ID.ToString()
            });
        ViewBag.ClientsDropdown = new SelectList(clientList, "Value", "Text", "Selected");
    }

我已经确认了clientList确实从数据库中获得了一个很好的客户列表,并且正确的SelectListItem具有"Selected"属性设置为True。

但是当我加载页面并检查下拉列表时,我得到的是:

<select id="ClientsDropdown" name="ClientsDropdown">
<option value="">Select a Client</option>
<option value="1">Test Client 1</option>
<option value="2">Test Client 2</option>

我本以为创建一个新的SelectList也会为每个选项添加一个Selected="something"值,但情况似乎并非如此。

任何对这个问题的帮助将是非常感激的,因为它是相当令人沮丧的知道,我可以在大约3分钟内完成这一点,如果我能够使用Web表单…

看起来我让它工作了!

我是这样做的:我已经有一个InvoiceDetailsModel要处理,所以我添加了:

public SelectList ClientList { get; set; }

然后,在我的InvoiceController中,我稍微改变了我的Details:

[HttpGet]
    public ViewResult Details(int id, int pageNumber = 1)
    {
        Invoice invoice = db.Invoices.Find(id);
        var clientList = db
            .Clients
            .OrderBy(x => x.Name)
            .ToList()
            .Select(x => new SelectListItem
            {
                Text = x.Name,
                Value = x.ID.ToString()
            });
        var model = new InvoiceDetailsModel() { Invoice = invoice, PageNumber = pageNumber };
        model.ClientList = new SelectList(clientList, "Value", "Text", model.Invoice.ClientOcrStringID);
        return View(model);
    }

来利用我对InvoiceDetailsModel的添加。最后,在我看来,我将下拉菜单更改为:

@Html.DropDownListFor(model => model.Invoice.ClientOcrStringID, Model.ClientList, "Select a Client")

我希望这能帮助某人…未来的任何人。

未在选择列表的下拉列表中设置选定值

以不使用ViewBag或ViewData的方式重构你的代码。这听起来很傻,但它会工作,你会有一个更好的代码。

你必须做什么:

  • 创建一个ViewModel类,它可以派生自Invoice类
  • 添加plus属性:pageNumber和SelectList
  • 在视图中使用DropDownListFor helper