2010-02-15 7 views
15

Tengo una entidad EF que está vinculada a una tabla SQL que contiene un campo de bit llamado "Activo". Genero el código de edición de la plantilla T4 y la página hereda de la entidad EF. En la parte inferior de la página, se generó una CheckBoxFor así:ASP.net MVC CheckBoxPara error de conversión

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

tengo la maravillosa serpenteante roja bajo model.Active, y el mensaje de error dice que no puedo convertir implícitamente el tipo bool? bool Por lo tanto, he intentado lo siguiente:

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

Es, por supuesto, no le gustó y me dio este error:

System.InvalidOperationException: Templates can be used only with field access, property access, single-dimension array index, or single-parameter custom indexer expressions.

Probablemente estoy perdiendo algo simple.

+0

Posible duplicado de: http://stackoverflow.com/questions/2490790/why-is-checkboxfor-producing-runtime-error –

Respuesta

39

Trate model.Active.Value

Si este campo no debe contener nulos, entonces debe cambiar el tipo de datos en el lado de la base de datos a not null.

EDITAR

¿Por qué sucede esto?

Su campo de base de datos se define como FIELDNAME BIT NULL. Significa que puede contener tres valores: NULL, verdadero y falso. Dado que puede contener tres valores, ¿está mapeado a bool? escriba en el marco de la entidad. bool? es otro nombre de Nullable<bool>, que es envoltorio alrededor de bool, lo que le permite tener un tercer valor: NULL. Dado que CheckBoxFor espera uno de dos valores, verdadero o falso, no puede excepto Nullable<bool>. Cada Nullable tiene una propiedad llamada value que devuelve wrap type. Pero debe tener en cuenta que cuando el campo de la base de datos contendrá el nulo Nullable<bool>.Value arrojará un error. Si está seguro de que este campo no debe contener valores NULL, debe cambiar su tipo de datos a FIELDNAME BIT NOT NULL y generar el modelo de la base de datos de nuevo. Esto cambiará el tipo de datos de bool? bool y no habrá necesidad de llamar propiedad Value.

+0

¡Bingo! ¿Te importa intentar una explicación de por qué esto supera la diferencia de tipo? –

+0

¡Rock, LukLed! ¡Gracias un montón! –

+1

Acabo de encontrar esta pregunta después de tener el mismo problema, y ​​esta respuesta resolvió la mía. Gracias +1 – RPM1984

Cuestiones relacionadas