【问题标题】:ASP.NET MVC SelectList doesn't select value on creationASP.NET MVC SelectList 在创建时不选择值
【发布时间】:2019-12-04 20:59:10
【问题描述】:

我正在使用 MVC 应用程序,它会创建一个下拉列表:

@Html.DropDownListFor(model => model.Title, new SelectList(ViewBag.TitleList, "Value", "Text", Model.Title), "-- Select Title--", new {@class = "form-control"})

相同的代码用于其他下拉菜单,它们按预期工作,但在这种情况下,模型的“标题”值未选中。它确实显示了值,并且在保存时,它会保存正确的值。我还确认模型中“Title”的值在运行时是正确的。

有谁知道为什么这不是自动选择当前值?

谢谢。

【问题讨论】:

  • 是否有一个 value 你正在通过它是 0?

标签: asp.net-mvc razor


【解决方案1】:

如果您使用 DropDownListFor 并传入值为 0 的数据,那么无论您做什么,它都会自动默认为该值。

两个解决方案是:

  1. 在 razor 中手动创建 HTML select,然后通过循环 ViewBag.TitleList 来填充它。这会给您更多的控制权,并且您可以更轻松地设置默认值。

<select>
    <option>Select Title</option>
    @foreach (var row in ViewBag.TitleList)
    {
        <option value="@row.Value">@row.Title</option>
    }
</select>
  1. 在加载页面时使用 javascript 然后只需选择值“-- 选择标题--”

 $('#idOfDropDown[text="-- Select Title--"]').attr("selected","selected");

【讨论】:

    【解决方案2】:

    这引发了另一个问题,即在使用它的其他方法中什么是有效的

    DropdownList vs DropdownListFor

    这两种方法在使用上其实比较混乱,我会给出基本的例子

    使用下面的代码

    @Html.DropDownListFor(m => m.SelectedProductId, Model.ProductList, "- Please select -", new {@class="form-control"}) 
    

    Model.ProductList 是一个 SelectList 项目,类似于 SelectList(products, "ID", "Name"),这意味着 ID 绑定到值,而名称绑定到文本。

    下面的代码

    @Html.DropDownList("SelectedProductId", Model.ProductList, "- Please select -", new {@class="form-control"}) 
    

    Model.ProductList 也是一个 SelectList 项目,看起来像这样 SelectList(products, "ID", "Name") 与第一个几乎相同。

    当您想将值放在下拉选择字段中时,上述两个代码都可以使用。

    但是当你想预先选择一个已经选择的值时,这两个方法会发生变化

    对于

     @Html.DropDownListFor(m => m.SelectedProductId, Model.ProductList, "- Please select -", new {@class="form-control"}) 
    

    因为它是与模型绑定的强类型,所以不需要像SelectList(products, "ID", "Name", "Selected Value")那样包含选定的值,绑定应该足够了,这可能是您遇到的问题

    对于

    @Html.DropDownList("SelectedProductId", Model.ProductList, "- Please select -", new {@class="form-control"}) 
    

    因为不是强绑定,所以需要在SelecteList中包含选中的值。

    注意

    使用DropdownList 而不在选择列表中包含所选值也可以,但字符串名称必须与模型参数相同文本大小写无关 例如m =&gt; m.Sex"Sex""sex"

    所以我的拙见建议或意见是使用

    @Html.DropDownListFor(model => model.Title, new SelectList(ViewBag.TitleList, "Value", "Text"), "-- Select Title--", new {@class = "form-control"})
    

    【讨论】:

      【解决方案3】:

      我发现这个问题有答案: Html.DropdownListFor selected value not being set

      我在上面发布的代码中对其进行了更改,但它无法正常工作,但干净和重建解决了这个问题。最初 ViewBag 属性被命名为“Title”,与模型属性相同。

      感谢您的帮助。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-11-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多