2010-02-15 11 views
15

Ich habe eine EF-Entität, die an eine SQL-Tabelle gebunden ist, die ein Bitfeld namens "Active" enthält. Ich erzeuge den Editiercode aus der T4-Vorlage, und die Seite erbt von der EF-Entität. Am unteren Rand der Seite, erzeugt es eine CheckBoxFor wie folgt aus:ASP.NET MVC CheckBoxFor Casting-Fehler

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

ich die wunderbare rote Wellen unter model.Active erhalten, und die Fehlermeldung sagt, dass ich nicht implizit Typ Bool umwandeln kann? blasen. Also habe ich versucht, die folgenden:

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

Es, natürlich, nicht so und gab mir diesen Fehler:

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

ich wohl einfach etwas fehle bin.

+0

Mögliche Duplikate von: http://StackOverflow.com/Questions/2490790/Why-is-Checkboxfor-producing-Runtime-Forror –

Antwort

39

model.Active.Value

Versuchen Wenn dieses Feld dann keine Nullwerte enthalten sein sollten, sollten Sie Datentyp auf Datenbankseite zu not null ändern.

EDIT

Warum passiert das das?

Ihr Datenbankfeld ist definiert als FIELDNAME BIT NULL. Es bedeutet, dass es drei Werte enthalten kann: NULL, wahr und falsch. Da es drei Werte enthalten kann, wird es auf bool? Geben Sie das Entity-Framework ein. bool? ist ein anderer Name von Nullable<bool>, der Wrapper um Bool ist, so dass es einen dritten Wert haben kann: NULL. Da CheckBoxFor einen von zwei Werten erwartet - wahr oder falsch, kann es nicht Nullable<bool>. Jede Nullable verfügt über eine Eigenschaft namens value, die den Wrapped-Typ zurückgibt. Aber Sie sollten sich darüber im Klaren sein, dass wenn das Datenbankfeld null enthält Nullable<bool>.Value einen Fehler auslöst. Wenn Sie sicher sind, dass dieses Feld keine NULL-Werte enthalten soll, sollten Sie den Datentyp in FIELDNAME BIT NOT NULL ändern und das Modell erneut aus der Datenbank generieren. Dies ändert den Datentyp von bool? zu boolen und es wird keine Notwendigkeit geben, Value-Eigenschaft aufzurufen.

+0

Bingo! Möchten Sie eine Erklärung dafür geben, warum dies den Typunterschied überwindet? –

+0

Sie rocken, LukLed! Vielen Dank! –

+1

Ich bin gerade auf diese Frage gestoßen, nachdem ich das gleiche Problem hatte, und diese Antwort hat meine Lösung gelöst. Danke +1 – RPM1984