ASP.net MVC CheckBox за ошибку приведения

У меня есть объект EF, который связан с таблицей SQL, которая содержит битовое поле под названием "Активный". Я генерирую код редактирования из шаблона T4, а страница наследуется от сущности EF. В нижней части страницы он сгенерировал CheckBoxFor так:

<%= Html.CheckBoxFor(model => model.Active) %>

Я получаю замечательный красный волнистый при моделировании. Активно, и сообщение об ошибке говорит, что я не могу неявно преобразовать тип bool? кипеть Итак, я попробовал следующее:

<%= Html.CheckBoxFor(model => (bool)model.Active) %>

Это, конечно, не понравилось и выдало мне эту ошибку:

System.InvalidOperationException: Шаблоны могут использоваться только с доступом к полям, доступом к свойствам, индексом одномерного массива или выражениями настраиваемого индексатора с одним параметром.

Я, наверное, упускаю что-то простое.

1 ответ

Решение

Пытаться model.Active.Value

Если это поле не должно быть обнуляемым, вам следует изменить тип данных на стороне базы данных на not null,

РЕДАКТИРОВАТЬ

Почему это происходит?

Ваше поле базы данных определяется как FIELDNAME BIT NULL, Это означает, что он может содержать три значения: NULL, true и false. Поскольку он может содержать три значения, он отображается в bool? введите в структуру лица. BOOL? это другое имя Nullable<bool>, который является оберткой вокруг bool, позволяя ему иметь третье значение: NULL. Так как CheckBoxFor ожидает одно из двух значений - true или false, он не может, кроме Nullable<bool>, Каждый Nullable имеет свойство с именем value, которое возвращает упакованный тип. Но вы должны знать, что когда поле базы данных будет содержать нуль Nullable<bool>.Value выдаст ошибку. Если вы уверены, что это поле не должно содержать значения NULL, вам следует изменить его тип данных на FIELDNAME BIT NOT NULL и снова сгенерировать модель из базы данных. Это изменит тип данных с bool? чтобы закипать и не нужно будет называть Value свойство.

Другие вопросы по тегам