DropDownListFor (...) выбор логического false по умолчанию - PullRequest
8 голосов
/ 06 октября 2011

У меня типичный тип раскрывающегося списка ДаНо в приложении.Для этого я разработал класс модели (скорее ViewModel Utility) для будущего расширения prupose.

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 ]

10 голосов
/ 15 июня 2015

ViewModel

public bool flag { get; set; }

View

@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)
8 голосов
/ 06 октября 2011

Модель:

public bool? Value { get; set; }

Представление:

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

Это автоматически создает выпадающий список с 3 состояниями, которые соответствуют 3 состояниям обнуляемого bool: null, true, false,Если вам требуется ответ «Значение», вы можете использовать аннотации данных следующим образом:

Модель:

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

Вывод: ваша модель должна быть реальной моделью - она ​​должна моделироватьвходные значения от unset для установки.Если вам нужно ввести int, вы, вероятно, захотите использовать обнуляемое значение int (поэтому int?) и потребуете значение.Таким образом, начальное значение равно нулю, а не 0. Это аналогично другим типам данных, за исключением string, который уже обнуляется.

3 голосов
/ 11 ноября 2014

В моем случае у меня было несколько таких выпадающих на одной странице, и я подумал, что буду умнее и буду использовать список выбора, например,

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) %>

это не сработало.Я инициализировал отдельный список выбора для каждого раскрывающегося списка, и это решило проблему

1 голос
/ 18 октября 2012

Я знаю, что это старая тема, но я подумал, что для других это может пригодиться, чтобы немного узнать об этом.

no выбрано по умолчанию, потому что значение по умолчанию для bool равно false

если вы просто установите модель как Нулевой способ Bool, как это в вашей модели представления, то он должен по умолчанию выбрать значение по умолчанию. :

public bool? Value { get; set; }

и затем вы просто устанавливаете свой выпадающий список следующим образом:

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

результат этого должен состоять в том, что когда значение bool равно нулю, автоматически выбранной опцией должно быть значение по умолчанию {Default Select Value}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...