2010-02-15 80 views
15

我有一個EF實體綁定到一個SQL表,它包含一個稱爲「活動」的位字段。我從T4模板生成編輯代碼,並且該頁面從EF實體繼承。在頁面的底部,它產生了CheckBoxFor這樣的:ASP.net MVC CheckBoxFor鑄造錯誤

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

我得到了美妙的紅色波浪model.Active下,錯誤消息說我不能隱式轉換bool類型?布爾。所以,我試過如下:

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

它,當然,不是這樣的,給了我這個錯誤:

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

我可能失去了一些東西簡單。

+0

可能的重複:http://stackoverflow.com/questions/2490790/why-is-checkboxfor-producing-runtime-error –

回答

39

嘗試model.Active.Value

如果該字段應該不可爲空,那麼你應該在數據庫方面的更改數據類型not null

編輯

爲什麼會出現這種情況?

您的數據庫字段被定義爲FIELDNAME BIT NULL。這意味着它可以包含三個值:NULL,true和false。由於它可以包含三個值,它映射到bool?鍵入實體框架。布爾?是Nullable<bool>的另一個名字,它是bool的包裝,允許它具有第三個值:NULL。由於CheckBoxFor需要兩個值中的一個 - 真或假,除了Nullable<bool>之外不能。每個Nullable都有一個屬性,它返回包裝類型的值。但是你應該知道,當數據庫字段將包含空值Nullable<bool>.Value時會拋出錯誤。如果您確定此字段不應包含NULL值,則應將其數據類型更改爲FIELDNAME BIT NOT NULL,然後再次從數據庫生成模型。這將改變數據類型從布爾?布爾,並且不需要調用Value屬性。

+0

賓果!你是否在意嘗試解釋爲什麼這會克服類型差異? –

+0

你搖滾,LukLed!謝謝一堆! –

+1

我遇到同樣的問題後,剛剛遇到了這個問題,這個答案解決了我的問題。感謝+1 – RPM1984