我整天都在忙于解决这个问题,所以我决定在这里寻求帮助,希望您能提供帮助。
我的观点如下:
@Html.DropDownListFor(model => model.IsProduction, new SelectList(new[]
{
new SelectListItem { Value = "", Text = "Select environment", Selected = true, Disabled = true },
new SelectListItem { Value = "false", Text = "Test" },
new SelectListItem { Value = "true", Text = "Production" }
},
"Value", "Text"),
new { @class = "form-control", @id = "selectEnvironment" })
如您所见,这是一个布尔值的下拉列表,该下拉列表中有3个值。第一个是我要默认选择的内容(尽管不是),然后是“ true”和“ false”的值。
模型中的布尔不是可为空的,也不应该为可为空。只要未选择“ true”或“ false”,该表单将无法提交。
我的问题是:有人可以看到,尽管我定义了默认情况下选择的“”值,但为什么默认情况下总是选择“ false”值?
我尝试了不带“ Disabled”属性的情况,并且它什么也没有改变。
感谢您的帮助,也许您可以给予:)
答案 0 :(得分:1)
摘要:这是bool
属性的预期行为,其默认值为false
。
我相信您设置了IsProduction
个布尔属性,如下所示:
[Required]
public bool IsProduction { get; set; }
由于这是不可空的布尔属性,因此默认值设置为false
(请参见this reference),并且如果没有值,则默认情况下将选择任何包含false
值的选项分配给该属性,该属性会覆盖Selected
实例的SelectListItem
属性设置。
如果将bool
更改为Nullable<bool>
(不应该这样),则会选择Selected = true
中的任何选项,而不是this fiddle中所示,因为Nullable<bool>
的默认值为null
,而不是false
。
此外,如果您检查reference source,还有名为SelectInternal()
和GetSelectListWithDefaultValue()
的私有方法,这些方法用来控制DropDownListFor
助手的行为。这说明了具有选定选项占位符的DropDownListFor
必须绑定到bool?
而不是bool
的原因。