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 свойство.