C# 如何使用byte类型属性的实体在Razor视图中呈现复选框

C# 如何使用byte类型属性的实体在Razor视图中呈现复选框,c#,asp.net-mvc-4,razor,C#,Asp.net Mvc 4,Razor,我正在从事一个ASP.netmvc4项目。我使用entityframework5和code-First工作流。以下是我的实体的一部分: public class News { //Other properties... public byte IsShortNews { get; set; } } 编辑现有新闻时,我希望呈现复选框。编译器抱怨无法将byte解析为bool,因此我尝试了以下方法: <li> @Html.CheckBoxFor(m => (m

我正在从事一个
ASP.netmvc4
项目。我使用
entityframework5
code-First
工作流。以下是我的实体的一部分:

public class News
{
    //Other properties...
    public byte IsShortNews { get; set; }

}
编辑现有新闻时,我希望呈现复选框。编译器抱怨无法将
byte
解析为
bool
,因此我尝试了以下方法:

<li>
  @Html.CheckBoxFor(m => (m.IsShortNews == 1? true : false))
  @Html.LabelFor(m => m.IsShortNews, new { @class = "checkbox" })
</li>
我不确定到底想告诉我什么,但似乎我不会那么容易解决我的问题

搜索web时,我找到了以下解决方案:

   public byte IsShortNews {get;set;}
   [NotMapped]
   public bool IsShortNewsBool 
   {
       get { return IsShortNews > 0; }
       set { IsShortNews = value ? 1 : 0; }
   }
但是我以前对
NotMapped
属性几乎没有经验,我不知道它是否专门用于该应用程序,但我们决定最好从项目中删除它们,因此我决定寻找另一种解决方案


在我创建新闻的视图中,我使用ViewModel,其中
IsShortNews
声明为bool,然后在我的控制器中,我只是
news.IsShortNews=model.IsShortNews?(字节)1:(字节)0但我不确定在这里使用viewmodel是否是一个好的选择。因为它是数据库中的现有记录,我必须使用实体来获取它:
News model=unitOfWork.NewsRepository.GetById(Id)然后必须使用我的viewmodel类型创建另一个对象-
NewsModel vModel=new NewsModel()然后将值从一个对象复制到另一个对象,以便将模型传递到视图并。。。对于这样的东西,似乎需要做很多工作。

对于布尔值,您需要将数据库列类型设置为a
bit
,将类属性设置为a
bool
,并且不需要做任何额外的工作来显示复选框

public class News
{
    //Other properties...
    public bool IsShortNews { get; set; }
}
HTML

  • @CheckBoxFor(m=>m.IsShortNews) @LabelFor(m=>m.IsShortNews,new{@class=“checkbox”})

  • 对于布尔值,您需要将数据库列类型设置为a
    bit
    ,将类属性设置为a
    bool
    ,并且无需进行任何额外的工作来显示复选框

    public class News
    {
        //Other properties...
        public bool IsShortNews { get; set; }
    }
    
    HTML

  • @CheckBoxFor(m=>m.IsShortNews) @LabelFor(m=>m.IsShortNews,new{@class=“checkbox”})

  • 对于布尔值,您需要将数据库列类型设置为a
    bit
    ,将类属性设置为a
    bool
    ,并且无需进行任何额外的工作来显示复选框

    public class News
    {
        //Other properties...
        public bool IsShortNews { get; set; }
    }
    
    HTML

  • @CheckBoxFor(m=>m.IsShortNews) @LabelFor(m=>m.IsShortNews,new{@class=“checkbox”})

  • 对于布尔值,您需要将数据库列类型设置为a
    bit
    ,将类属性设置为a
    bool
    ,并且无需进行任何额外的工作来显示复选框

    public class News
    {
        //Other properties...
        public bool IsShortNews { get; set; }
    }
    
    HTML

  • @CheckBoxFor(m=>m.IsShortNews) @LabelFor(m=>m.IsShortNews,new{@class=“checkbox”})

  • 如果值为1或0,为什么要使用
    字节而不是
    bool
    ?或者我遗漏了什么?如果值为1或0,为什么要使用
    byte
    而不是
    bool
    ?或者我遗漏了什么?如果值为1或0,为什么要使用
    byte
    而不是
    bool
    ?或者我遗漏了什么?如果值为1或0,为什么要使用
    byte
    而不是
    bool
    ?还是我遗漏了什么?抱歉这么晚才回复,我以为周五没人会注意。实际上是
    code-First
    ,所以我的数据库是根据我的实体自动生成的。在我的实体中将
    IsShortNews
    声明为bool,以便
    EF
    用正确的类型创建表,这就足够了吗?@Leron我想你已经发现了,因为你接受了这个答案,但是,是的,你只需要将该属性声明为bool,EF将在代码优先的场景中处理其余部分。很抱歉这么晚才回复,我想周五没人会注意。实际上是
    code-First
    ,所以我的数据库是根据我的实体自动生成的。在我的实体中将
    IsShortNews
    声明为bool,以便
    EF
    用正确的类型创建表,这就足够了吗?@Leron我想你已经发现了,因为你接受了这个答案,但是,是的,你只需要将该属性声明为bool,EF将在代码优先的场景中处理其余部分。很抱歉这么晚才回复,我想周五没人会注意。实际上是
    code-First
    ,所以我的数据库是根据我的实体自动生成的。在我的实体中将
    IsShortNews
    声明为bool,以便
    EF
    用正确的类型创建表,这就足够了吗?@Leron我想你已经发现了,因为你接受了这个答案,但是,是的,你只需要将该属性声明为bool,EF将在代码优先的场景中处理其余部分。很抱歉这么晚才回复,我想周五没人会注意。实际上是
    code-First
    ,所以我的数据库是根据我的实体自动生成的。仅在我的实体中将
    IsShortNews
    声明为bool就足以让
    EF
    完成创建具有正确类型的表的所有工作吗?@Leron我猜您已经发现了,因为您接受了这个答案,但是是的,您只需要将属性声明为bool,在代码优先的场景中,EF将处理其余的内容。