2010-03-22 9 views
11

Das Feld, mit dem die CheckBox verdrahtet ist, ist Nullable.Warum ist CheckBoxFür die Erzeugung von Laufzeitfehler

Auf meiner Ansicht bekomme ich folgende Fehlermeldung:

Cannot implicitly convert type 'bool?' to 'bool'

<%= Html.CheckBoxFor(model => model.Product.Exclusive) %> 

Wie behebe ich es ohne die Datenbank-Design ändern zu müssen?

Antwort

16

Exclusive kann nicht Nullable sein, es ergibt keinen Sinn für die ViewEngine, wenn der Ausdruck ausgewertet wird. Es muss entweder das Kontrollkästchen aktivieren oder nicht und auch mit einem true oder false Wert antworten. Ihr Modell muss einen bool Wert haben, aber das bedeutet nicht, dass Ihre Datenbank das wissen muss. Sie müssen nur irgendwo zwischen der Datenbank und dem Modell eine Übersetzung machen, z. Model.Exclusive = DAO.Exclusive ?? false.

Ohne zu wissen, was NULL in Ihrem Datenschema darstellt oder wie Sie Ihre Modellobjekte generieren, ist es schwierig, Ihnen mehr Details zu geben.

Edit: habe nicht getestet, aber Sie könnten mit etwas so einfachen wie

public bool NoNullExclusive 
{ 
    get { return Exclusive ?? false; } 
    set { Exclusive = value; } 
} 

und ersetzt

<%= Html.CheckBoxFor(model => model.Product.Exclusive) %> 

mit

<%= Html.CheckBoxFor(model => model.Product.NoNullExclusive) %> 
+0

Ich habe die Eigenschaft, die Sie vorgeschlagen wegkommen in einer Teilklasse. Wäre dies der beste Ort, um diese Manipulation zu machen? – Picflight

+0

Wenn Ihre Produktklasse automatisch generiert wird, dann ja. Wenn nicht, dann entweder in der Klasse selbst oder im Mapping vom Datenzugriffsobjekt zum Modell. – pdr

Verwandte Themen