我在应用程序中有典型的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时,如何获得正常行为?
答案 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}