Entity framework 使用自定义类重载EF验证
我使用实体框架,有一个视图是tblAuthorMaster类型的强类型视图模型。Post ModelState返回以下错误: The value '0' is not valid for Status. 值“0”对于状态无效。 这里的状态是DB/EF中的boolen数据类型,在查看时是下拉列表(TEXT=“active/inactive”,VALUE=“1/0”),因此每当我发布表单时,我都会收到上面的错误消息 我尝试了一些解决这个问题的方法,但似乎效果不太好 以下是我的代码库: 这里tblAuthorMaster是EF类,AuthorModel是我的自定义类,我使用它进行一些自定义验证和其他东西 [MetadataType(typeof(AuthorModel))] public partial class tblAuthorMaster { } public class AuthorModel { [Required(ErrorMessage = "*")] public string AuthorName { get; set; } [Required(ErrorMessage = "*")] public bool Status { get; set; } } [元数据类型(typeof(AuthorModel))] 公共部分类tblAuthorMaster{} 公共类AuthorModel { [必需(ErrorMessage=“*”)] 公共字符串AuthorName{get;set;} [必需(ErrorMessage=“*”)] 公共布尔状态{get;set;} }Entity framework 使用自定义类重载EF验证,entity-framework,c#-4.0,asp.net-mvc-2,Entity Framework,C# 4.0,Asp.net Mvc 2,我使用实体框架,有一个视图是tblAuthorMaster类型的强类型视图模型。Post ModelState返回以下错误: The value '0' is not valid for Status. 值“0”对于状态无效。 这里的状态是DB/EF中的boolen数据类型,在查看时是下拉列表(TEXT=“active/inactive”,VALUE=“1/0”),因此每当我发布表单时,我都会收到上面的错误消息 我尝试了一些解决这个问题的方法,但似乎效果不太好 以下是我的代码库: 这里tblAu
提前感谢。要使其正常工作,下拉列表中的值必须是
true/false
,而不是1/0
。由于您尚未演示如何生成doropdown,因此很难提供帮助,但它可能看起来像这样:
<%= Html.DropDownListFor(
x => x.Status,
new[]
{
new SelectListItem { Value = "true", Text = "active" },
new SelectListItem { Value = "false", Text = "inactive" },
}
) %>
x.状态,
新[]
{
新建SelectListItem{Value=“true”,Text=“active”},
新建SelectListItem{Value=“false”,Text=“inactive”},
}
) %>
另外,使用带有2个可能值的下拉列表有什么意义?HTML为此提供了复选框:
<%= Html.CheckBoxFor(x => x.Status) %>
x.Status)%%>
最后一句话:您在问题中所称的视图模型根本不是视图模型。这是一个自动生成的EF域模型。视图模型是为给定视图的要求专门设计的类,它们不是由某些向导自动生成的。将值设置为true/false可以正常工作,但为什么不使用1/0。因为在.NET中,布尔类型可以具有值
true
或false
,而不是1
和0
,与其他一些语言相反,例如javascript。当默认模型绑定器尝试将请求中的值解析为布尔值时,它失败并将错误消息添加到ModelState
。谢谢Darin,实际上我正在寻找其他选项,其中包括对AuthorModel类的一些更改。你能建议这样做吗???是的,如果要绑定到1
或0
,请使用Integer
而不是Boolean
。这当然是一种非常错误的方法。