Моя модель имеет логическое значение, которое должно допускать значение NULL
public bool? Foo
{
get;
set;
}
поэтому в моем Razor cshtml у меня есть
@Html.CheckBoxFor(m => m.Foo)
кроме этого не работает. Также не выполняется приведение с помощью (bool). Если я сделаю
@Html.CheckBoxFor(m => m.Foo.Value)
это не создает ошибки, но не привязывается к моей модели при публикации, а для foo установлено значение null. Как лучше всего отобразить Foo на странице и привязать его к моей модели в публикации?
asp.net-mvc-3
razor
nullable
DMulligan
источник
источник
Ответы:
Я получил это работать с
а затем создайте Boolean.cshtml в папке EditorTemplates и вставьте
внутри.
источник
HasValue
свойства, допускающего значение NULL , но не для фактического логического значения. Это создаст установленный флажок, если независимо от базового значения. Если обнуляемый объект имеет значение, оно всегда будет истинным.Нашел ответ в аналогичном вопросе - Отображение Nullable Bool как CheckBox . Это очень просто и просто работает:
Это похоже на принятый ответ от @afinkelstein, за исключением того, что нам не нужен специальный «шаблон редактора».
источник
У меня
bool? IsDisabled { get; set; }
в модели. Вставляется, если в просмотре.источник
Зачем? В этом нет смысла. Флажок имеет два состояния: установлен / не установлен или True / False, если хотите. Третьего состояния нет.
Или подождите, вы используете модели своей предметной области в своих представлениях вместо моделей представлений? Это твоя проблема. Поэтому решение для меня - использовать модель представления, в которой вы определите простое логическое свойство:
и теперь действие вашего контроллера передаст эту модель представления представлению и сгенерирует соответствующий флажок.
источник
Усложнение примитива со скрытыми полями, чтобы выяснить, не рекомендуется ли значение False или Null.
Галочка не то , что вы должны использовать - это действительно имеет только одно состояние: Проверено . В противном случае это могло быть что угодно.
Когда поле вашей базы данных является логическим (
bool?
), допускающим значение NULL , пользовательский интерфейс должен использовать 3-Radio Buttons, где первая кнопка представляет ваш «Checked», вторая кнопка представляет «Not Checked», а третья кнопка представляет ваш NULL, независимо от семантики нулевое означает. Вы можете использовать<select><option>
раскрывающийся список, чтобы сохранить недвижимость, но пользователь должен щелкнуть дважды, и выбор не так мгновенно понятен.RadioButtonList, определенный как расширение с именем RadioButtonForSelectList, создает для вас переключатели, включая выбранное / отмеченное значение, и устанавливает
<div class="RBxxxx">
чтобы вы могли использовать css, чтобы переключать переключатели горизонтально (display: inline-block), вертикально или в виде таблицы (display: inline-block; width: 100px;)В модели (я использую строку, строку для определения словаря в качестве педагогического примера. Вы можете использовать bool ?, строка)
источник
Для меня решением было изменить модель представления. Предположим, вы ищете счета-фактуры. Эти счета могут быть оплачены или нет. Таким образом, у вашего поиска есть три варианта: Платный, Неоплачиваемый или «Мне все равно».
Я изначально установил это как bool? поле:
Это заставило меня наткнуться на этот вопрос. В итоге я создал тип Enum и обработал это следующим образом:
Конечно, я обернул их этикетками и указал текст, я просто имел в виду еще один вариант, который стоит рассмотреть.
источник
Флажок предлагает вам только 2 значения (истина, ложь). Обнуляемое логическое значение имеет 3 значения (true, false, null), поэтому это невозможно сделать с помощью флажка.
Вместо этого можно использовать раскрывающийся список.
Модель
Контроллер
Посмотреть
источник
Я бы фактически создал для него шаблон и использовал бы этот шаблон с EditorFor ().
Вот как я это сделал:
Создать мой шаблон, который в основном представляет собой частичное представление, которое я создал в каталоге EditorTemplates, в разделе Общие, в разделе Представления назовите его как (например)
CheckboxTemplate
::Используйте это так (в любом виде):
@ Html.EditorFor (x => x.MyNullableBooleanCheckboxToBe, "CheckboxTemplate")
Вот и все.
Шаблоны настолько мощны в MVC, используйте их .. Вы можете создать всю страницу как шаблон, который вы будете использовать с
@Html.EditorFor()
; при условии, что вы передаете его модель представления в лямбда-выражении.источник
Самый чистый подход, который я мог придумать, - это расширить доступные расширения,
HtmlHelper
при этом повторно используя функции, предоставляемые фреймворком.Я экспериментировал с «формированием» выражения, чтобы позволить прямой переход к носителю,
CheckBoxFor<Expression<Func<T, bool>>>
но я не думаю, что это возможно.источник
public static MvcHtmlString CheckBoxFor<TModel>(this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, bool?>> expression, object htmlAttributes)
и он отлично работал.У меня была аналогичная проблема в прошлом.
Создайте поле флажка в HTML и установите атрибут name = "Foo". Это все равно должно публиковаться правильно.
источник
Просто проверьте нулевое значение и верните ему false:
источник
Я тоже столкнулся с той же проблемой. Я попробовал следующий подход для решения проблемы, потому что я не хочу изменять БД и снова генерировать EDMX.
источник
При создании EditorTemplate для модели, содержащей логическое значение, допускающее значение NULL ...
Разделите логическое значение, допускающее значение NULL, на 2 логических значения:
В шаблоне редактора:
Не возвращайте исходное свойство Foo, потому что теперь оно вычисляется из FooIsNull и FooCheckbox.
источник
Все ответы выше связаны с собственными проблемами. Самый простой / чистый способ ИМО - создать помощника
Бритва MVC5
App_Code / Helpers.cshtml
использование
В моем сценарии флажок, допускающий значение NULL, означает, что сотрудник еще не задавал вопрос клиенту, поэтому он обернут в,
.checkbox-nullable
чтобы вы могли соответствующим образом стилизовать и помочь конечному пользователю определить, что это ни то,true
ниfalse
CSS
источник
Методы расширения:
источник
Радиокнопки полезны, но они не позволяют отменить выбор . Если вам нужно такое поведение, рассмотрите возможность использования раскрывающегося списка / выбора. Следующий код будет генерировать,
SelectList
и это успешно связывается с логическим значением, допускающим значение NULL:источник
источник
ты можешь попробовать вот так
источник
Это старый вопрос, и существующие ответы описывают большинство альтернатив. Но есть один простой вариант, если у вас есть bool? в вашей модели просмотра, и вас не волнует null в вашем пользовательском интерфейсе:
источник