Html.DropDownListFor 默认 SelectListItem 没有常规布尔值
Html.DropDownListFor default SelectListItem with no value for regular bool
我整天都在摸索这个问题,所以我决定在这里寻求帮助,希望你能提供帮助。
我在视图中有以下内容:
@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" 属性的情况下尝试过,但没有任何改变。
感谢您提供的任何帮助:)
总结: 这是 bool
属性 的预期行为,默认值为 false
.
我相信你有 IsProduction
布尔值 属性 设置如下:
[Required]
public bool IsProduction { get; set; }
因为这是不可为 null 的布尔值 属性,默认值设置为 false
(参见 this reference),任何包含 false
值的选项都将是当没有值分配给 属性 时默认选择,它会覆盖 SelectListItem
实例的 Selected
属性 设置。
如果您将 bool
更改为 Nullable<bool>
(您不应该这样做),将选择任何带有 Selected = true
的选项,如 this fiddle 中所示因为 Nullable<bool>
的默认值是 null
而不是 false
.
此外,如果您检查 reference source,还有名为 SelectInternal()
和 GetSelectListWithDefaultValue()
的私有方法,它们用于控制 DropDownListFor
助手的行为。这解释了为什么带有选定选项占位符的 DropDownListFor
必须绑定到 bool?
而不是 bool
.
的原因
我整天都在摸索这个问题,所以我决定在这里寻求帮助,希望你能提供帮助。
我在视图中有以下内容:
@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" 属性的情况下尝试过,但没有任何改变。
感谢您提供的任何帮助:)
总结: 这是 bool
属性 的预期行为,默认值为 false
.
我相信你有 IsProduction
布尔值 属性 设置如下:
[Required]
public bool IsProduction { get; set; }
因为这是不可为 null 的布尔值 属性,默认值设置为 false
(参见 this reference),任何包含 false
值的选项都将是当没有值分配给 属性 时默认选择,它会覆盖 SelectListItem
实例的 Selected
属性 设置。
如果您将 bool
更改为 Nullable<bool>
(您不应该这样做),将选择任何带有 Selected = true
的选项,如 this fiddle 中所示因为 Nullable<bool>
的默认值是 null
而不是 false
.
此外,如果您检查 reference source,还有名为 SelectInternal()
和 GetSelectListWithDefaultValue()
的私有方法,它们用于控制 DropDownListFor
助手的行为。这解释了为什么带有选定选项占位符的 DropDownListFor
必须绑定到 bool?
而不是 bool
.