2011-11-10 4 views
2

私はチェックボックスが必要ですが、基礎となるデータはデータベースにsmallint型です。そのデータ型で@ Html.Checkboxを作成する方法がわかりません。MVC - @ Html.CheckBoxFor

タイプ「short?」を暗黙的に変換できません。 「ブール」

にここで私が持っているコードされています

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

答えて

0

ブール値をデータベースに格納する場合は、DBタイプのビット'smallintの代わりに(ここで0はfalse、1は真となります)。

それ以外の場合は、まずmodel.HasCycleをboolに変換する必要があります。また、タイプが短いので? (null値)の場合は、null値も処理する必要があります。おそらく、モデル自体でこれを処理し、HasCycleを短いものではなくboolとしてモデルから公開する必要があります。それでも、あなたは前後にいくつかの問題にぶつかることがあります。正しい方法は、データベースタイプを変更することです。

短く変換するには?あなたは次のようなことをすることができます:

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

チェックボックスは、真または偽を意味し、ブール値です。 true/false(1,0)を期待しているのであれば、おそらくデータベースタイプをboolに設定するべきです。これをしたくない場合は、int値をbool(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; } 
} 

うまくいきます。

関連する問題