Ошибка ASP.NET MVC CheckBoxFor

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

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

Я получаю прекрасный красный squiggly под 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 имеет свойство, называемое значением, которое возвращает завернутый тип. Но вы должны знать, что когда поле базы данных будет содержать null Nullable<bool>.Value, выдается ошибка. Если вы уверены, что это поле не должно содержать значений NULL, вы должны изменить его тип данных на FIELDNAME BIT NOT NULL и снова создать модель из базы данных. Это изменит тип данных из bool? для bool и не нужно будет вызывать свойство Value.