Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Entity framework 使用自定义类重载EF验证_Entity Framework_C# 4.0_Asp.net Mvc 2 - Fatal编程技术网

Entity framework 使用自定义类重载EF验证

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

我使用实体框架,有一个视图是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;} }
提前感谢。

要使其正常工作,下拉列表中的值必须是
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
。这当然是一种非常错误的方法。