ASP.net MVC CheckBox за ошибку приведения - PullRequest
16 голосов
/ 15 февраля 2010

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

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

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

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

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

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

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

1 Ответ

40 голосов
/ 15 февраля 2010

Попробуйте model.Active.Value

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

EDIT

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

Поле вашей базы данных определено как 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.

...