ASP.NET MVC SelectList在创建时未选择值

时间:2019-07-26 13:42:24

标签: asp.net-mvc

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

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

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

有人知道为什么这不能自动选择当前值吗?

谢谢。

3 个答案:

答案 0 :(得分:1)

这又提出了一个问题,即在使用该方法的其他方法中哪些方法可行

DropdownList DropdownListFor

这两种方法实际上在用法上令人困惑,我将给出一些基本示例

使用下面的代码

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

Model.ProductList是一个SelectList的{​​{1}}项,这意味着ID绑定到值,而Name绑定到文本。

获取以下代码

SelectList(products, "ID", "Name")

@Html.DropDownList("SelectedProductId", Model.ProductList, "- Please select -", new {@class="form-control"}) 也是Model.ProductList的{​​{1}}项,与第一个项目几乎相同。

当您要在下拉选择字段中输入值时,以上两种代码均适用。

但是,当您要预先选择一个已经选择的值时,方法会同时针对这两个值

对于

SelectList

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

对于

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

由于它不是牢固绑定的,因此需要在SelecteList中包括选定的值。

注意

使用SelectList(products, "ID", "Name", "Selected Value")而不在“选择”列表中包含所选值也可以,但是字符串名称必须与模型参数相同文本大小写无关,例如{{ 1}}和@Html.DropDownList("SelectedProductId", Model.ProductList, "- Please select -", new {@class="form-control"}) DropdownList

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

m => m.Sex

答案 1 :(得分:0)

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

对此的两种解决方案是:

  1. 用剃刀手动创建HTML select,然后通过循环遍历ViewBag.TitleList来填充HTML。这样可以给您更多的控制权,并且您可以更轻松地设置默认值。

<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 :(得分:0)

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

我已在上面发布的代码中对其进行了更改,但它没有用,但是经过彻底的重新构建解决了该问题。最初,ViewBag属性被命名为“ Title”,与模型属性相同。

感谢您的帮助。