2011-11-10 41 views
2

我需要一個複選框,但潛在的數據類型SMALLINT的數據庫。不知道如何使用該數據類型製作@ Html.Checkbox。它抱怨說以下內容:MVC - @ Html.CheckBoxFor

無法隱式轉換類型「短?以「布爾」

這裏是我的代碼:

@Html.CheckBoxFor(model => model.HasCycle) 

回答

0

如果您在數據庫中存儲一個布爾值,那麼你應該使用DB型「位'而不是smallint(0將是錯誤的,1將是真實的)。

否則,您需要先model.HasCycle轉換爲布爾。另外,由於它是短型的? (可爲空),您還需要處理空值。你可能會想在模型本身來處理這個問題,並公開從模型爲bool,而不是一個短期暴露HasCycle。不過,您可能會遇到一些問題,正確的做法是更改數據庫類型。

要短轉換?到一個布爾,你可以做這樣的事情:

bool hasCycleBool = false; //if HasCycle is null, this will remain false 
if(model.HasCycle != null) 
{ 
    hasCycleBool = Convert.ToBoolean(model.HasCycle); 
} 
0

複選框是一個布爾值,這意味着真或假。如果你期待真/假(1,0),你可能應該將數據庫類型設置爲布爾值。如果你不想這樣做,你必須將int值轉換爲布爾(1,0)

3

我有同樣的問題比你。我們使用smallint來映射數據庫中的布爾值,並且我們不能改變它。

我正在開發一個新的ASP.NET MVC應用程序,基於我們現有的數據庫,所以我必須處理這個問題。

我採用的解決方案是創建一個未映射的布爾屬性來從我的映射(smallint/short)屬性轉換。如下:

public short AllowMailing { get; set; } 

[NotMapped] 
public bool AllowMailingBool 
{ 
    get { return AllowMailing == 1? true : false; } 
    set { AllowMailing = value ? (short)1 : (short)0; } 
} 

它工作正常。

相關問題