DropDownListFor(...)默认选择布尔值false

时间:2011-10-06 15:52:29

标签: asp.net-mvc asp.net-mvc-3 asp.net-mvc-2

我在应用程序中有典型的YesNo类型的下拉列表。为此,我为未来的扩展程序开发了模型(而不是ViewModel实用程序)。

public string Text { get; set; } // represents text part
        public bool Value { get; set; } // represent value
        public List<DropDown> DropDowns { get; set; } //list for binding
        public void BuildYesNoDropDown()
        {
            DropDowns = new List<DropDown>();
            DropDowns.Add(new DropDown { Text = "Yes", Value = true });
            DropDowns.Add(new DropDown { Text = "No", Value = false });
        }

然后,我将其绑定在以下视图中:

@Html.DropDownListFor(x => x.SelectedValue, new SelectList(Model.DropDowns, "Value", "Text",1),"Select") //last para - OptionLabel

在视图上,所有三个参数都显示,即“选择”,“是”和“否”。但是,默认情况下选择“否”。如果我将“Value”属性设置为整数然后它工作正常并且默认选择“Select”,但是如代码中所提到的,如果我倾向于使用bool类型,则选择“No”。

当DataValueField是bool时,如何获得正常行为?

4 个答案:

答案 0 :(得分:10)

<强>视图模型

public bool flag { get; set; }

查看

@Html.DropDownListFor(model => model.flag, new List<SelectListItem>()
{
   new SelectListItem() { Text = "Yes", Value = "True" },
   new SelectListItem() { Text = "No", Value = "False"}
}, "Select.....", new { @id = "flag", @class="form-control" })
@Html.ValidationMessageFor(model => model.flag)

答案 1 :(得分:8)

型号:

public bool? Value { get; set; }

查看:

@Html.EditorFor(model => model.Value)

这会自动生成一个下拉列表,其中3个状态与可以为空的bool的3个状态匹配:null,true,false。如果您需要回答Value,可以使用如下数据注释:

型号:

[Required]
public bool? Value { get; set; }

外卖是你的模型需要成为一个真实的模型 - 它需要模拟从未设置到设置的输入值。如果您需要输入int,您可能希望使用可为空的int(所以int?)并要求该值。这样,初始值为null而不是0.它与除string之外的其他数据类型类似,它已经可以为空。

答案 2 :(得分:3)

在我的情况下,我在同一页面上有一堆这些下拉菜单,我认为我很聪明并重复使用选择列表,例如。

var YesOrNoTriState = new List<SelectListItem> {
  new SelectListItem { Text = "Select", Value = "" },
  new SelectListItem { Text = "Yes", Value = true.ToString() },
  new SelectListItem { Text = "No", Value = false.ToString() }
};

并在视图中

<%: Html.DropDownListFor(x => x.Field1, Model.YesOrNoTriState) %>
<%: Html.DropDownListFor(x => x.Field2, Model.YesOrNoTriState) %>

那不起作用。我为每个下拉列表初始化了一个单独的选择列表,并修复了问题

答案 3 :(得分:1)

我知道这是一个古老的话题,但我认为对于其他人而言,这可能会让我们知道一些背景知识。

默认选择no,因为bool的默认值为false

如果您只是将模型设置为a 在您的视图模型中,null-able Bool就像这样,它应默认选择您的默认值。 :

public bool? Value { get; set; }

然后你只需在视图中设置你的下拉列表:

@Html.DropDownListFor(x => x.SelectedValue, new SelectList(Model.DropDowns, "Value", "Text",1),"{Default Select Value}")

结果应该是当bool为null时,自动选择的选项应该是您的默认值{Default Select Value}