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

Sta*_*tch 8 asp.net-mvc asp.net-mvc-3 asp.net-mvc-2

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

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 });
        }
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

Jos*_*980 11

视图模型

public bool flag { get; set; }
Run Code Online (Sandbox Code Playgroud)

视图

@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)
Run Code Online (Sandbox Code Playgroud)


Cym*_*men 8

模型:

public bool? Value { get; set; }
Run Code Online (Sandbox Code Playgroud)

视图:

@Html.EditorFor(model => model.Value)
Run Code Online (Sandbox Code Playgroud)

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

模型:

[Required]
public bool? Value { get; set; }
Run Code Online (Sandbox Code Playgroud)

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


Che*_*les 5

就我而言,我在同一页面上有一堆这样的下拉菜单,我想我会很聪明并重用选择列表,例如

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

并且在视图中

<%: Html.DropDownListFor(x => x.Field1, Model.YesOrNoTriState) %>
<%: Html.DropDownListFor(x => x.Field2, Model.YesOrNoTriState) %>
Run Code Online (Sandbox Code Playgroud)

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