【问题标题】:Html.DropDownListFor default SelectListItem with no value for regular boolHtml.DropDownListFor 默认 SelectListItem 没有常规 bool 值
【发布时间】:2018-12-19 15:18:57
【问题描述】:

我整天都在摸索这个问题,所以我决定在这里寻求一些帮助,希望你能提供帮助。

我有以下观点:

  @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”的值。

模型中的布尔值不可为空,也不应该为空。只要没有选择“真”或“假”,表单将无法提交。

我的问题是:任何人都可以看到,为什么它会默认始终选择“false”值,尽管我已经定义了默认选择的“”值?

我在没有“禁用”属性的情况下尝试过它,它没有任何改变。

感谢您提供的任何帮助:)

【问题讨论】:

    标签: c# asp.net selectlist dropdownlistfor selectlistitem


    【解决方案1】:

    总结:这是bool 属性的预期行为,其默认值为false

    我相信你有 IsProduction 布尔属性设置如下:

    [Required]
    public bool IsProduction { get; set; }
    

    由于这是不可为空的布尔属性,默认值设置为false(见this reference),任何包含false值的选项在没有为属性赋值时默认选择,覆盖SelectListItem 实例的Selected 属性设置。

    如果您将bool 更改为Nullable<bool>(您不应该这样做),则将选择带有Selected = true 的任何选项,如this fiddle 所示,因为Nullable<bool> 的默认值是@ 987654336@ 而不是 false

    此外,如果您检查reference source,则有名为SelectInternal()GetSelectListWithDefaultValue() 的私有方法用于控制DropDownListFor 助手的行为。这就解释了为什么带有选定选项占位符的DropDownListFor 必须绑定到bool? 而不是bool

    【讨论】:

    • 好吧,我知道 bool 的默认值是 false,但我希望有其他方法可以将模型值设置为 bool?感谢您花时间回答我的问题。我会把它标记为答案:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-24
    • 2014-07-11
    • 1970-01-01
    • 1970-01-01
    • 2014-06-29
    • 1970-01-01
    相关资源
    最近更新 更多