Asp.net-Mvc

DropDownListFor(…) 預設選擇 boolean false

  • June 15, 2015

我在應用程序中有典型的 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 時如何獲得正常行為?

模型:

public bool? Value { get; set; }

看法:

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

這會自動生成一個下拉列表,其中包含 3 個狀態,這些狀態與可空 bool 的 3 個狀態相匹配:null、true、false。如果您需要回答該值,則可以使用如下數據註釋:

模型:

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

要點是你的模型需要是一個真實的模型——它需要對從未設置到設置的輸入值進行建模。如果您需要輸入 a int,您可能希望使用可為空的 int (so int?) 並要求該值。這樣,初始值為 null 而不是 0。它與其他數據類型類似,但string已經可以為 null。

視圖模型

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)

引用自:https://stackoverflow.com/questions/7676994