我需要一个复选框,但基础数据在数据库中的类型为smallint。不知道如何使用该数据类型生成@ Html.Checkbox。它抱怨说:
无法隐式转换类型'short?' 'bool'
以下是我的代码:
@Html.CheckBoxFor(model => model.HasCycle)
答案 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; }
}
工作正常。
答案 1 :(得分:1)
如果要在数据库中存储布尔值,则应使用DB类型“bit”而不是smallint(其中0将为false,1将为true)。
否则,您需要先将model.HasCycle转换为bool。另外,因为它是短型? (可为空),您还需要处理空值。您可能希望在模型本身中处理此问题,并将模型中的HasCycle公开暴露为bool而不是short。尽管如此,您可能会遇到一些来回的问题,而正确的方法是更改数据库类型。
从简短转换?对于布尔你可以做类似的事情:
bool hasCycleBool = false; //if HasCycle is null, this will remain false
if(model.HasCycle != null)
{
hasCycleBool = Convert.ToBoolean(model.HasCycle);
}
答案 2 :(得分:0)
复选框是一个布尔值,表示true或false。如果你期望真/假(1,0),你可能应该将数据库类型设置为bool。如果您不想这样做,则必须将int值转换为bool(1,0)