我正在使用MVC应用程序,它使用以下内容创建一个下拉列表:
@Html.DropDownListFor(model => model.Title, new SelectList(ViewBag.TitleList, "Value", "Text", Model.Title), "-- Select Title--", new {@class = "form-control"})
相同的代码用于其他下拉菜单,并且按预期方式工作,但是在这种情况下,未选择“标题”的模型值。它确实显示值,并且保存后会保存正确的值。我还确认了模型中“标题”的值在运行时是正确的。
有人知道为什么这不能自动选择当前值吗?
谢谢。
答案 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的数据,那么无论您做什么工作,它都会自动默认为默认值。
对此的两种解决方案是:
select
,然后通过循环遍历ViewBag.TitleList
来填充HTML。这样可以给您更多的控制权,并且您可以更轻松地设置默认值。
<select>
<option>Select Title</option>
@foreach (var row in ViewBag.TitleList)
{
<option value="@row.Value">@row.Title</option>
}
</select>
$('#idOfDropDown[text="-- Select Title--"]').attr("selected","selected");
答案 2 :(得分:0)
我发现这个问题的答案是: Html.DropdownListFor selected value not being set
我已在上面发布的代码中对其进行了更改,但它没有用,但是经过彻底的重新构建解决了该问题。最初,ViewBag属性被命名为“ Title”,与模型属性相同。
感谢您的帮助。