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()代码>然后将值从一个对象复制到另一个对象,以便将模型传递到视图并。。。对于这样的东西,似乎需要做很多工作。对于布尔值,您需要将数据库列类型设置为abit
,将类属性设置为abool
,并且不需要做任何额外的工作来显示复选框
public class News
{
//Other properties...
public bool IsShortNews { get; set; }
}
HTML
@CheckBoxFor(m=>m.IsShortNews)
@LabelFor(m=>m.IsShortNews,new{@class=“checkbox”})
对于布尔值,您需要将数据库列类型设置为abit
,将类属性设置为abool
,并且无需进行任何额外的工作来显示复选框
public class News
{
//Other properties...
public bool IsShortNews { get; set; }
}
HTML
@CheckBoxFor(m=>m.IsShortNews)
@LabelFor(m=>m.IsShortNews,new{@class=“checkbox”})
对于布尔值,您需要将数据库列类型设置为abit
,将类属性设置为abool
,并且无需进行任何额外的工作来显示复选框
public class News
{
//Other properties...
public bool IsShortNews { get; set; }
}
HTML
@CheckBoxFor(m=>m.IsShortNews)
@LabelFor(m=>m.IsShortNews,new{@class=“checkbox”})
对于布尔值,您需要将数据库列类型设置为abit
,将类属性设置为abool
,并且无需进行任何额外的工作来显示复选框
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将处理其余的内容。