使用Custom类重载EF验证

时间:2012-09-24 07:54:41

标签: entity-framework c#-4.0 asp.net-mvc-2

我正在使用Entity Framework,并且有一个视图是tblAuthorMaster类型的强类型视图模型。 On Post ModelState返回以下错误:


The value '0' is not valid for Status.

这里状态是DB / EF中的boolen数据类型,并且在查看它的下拉列表(TEXT =“active / inactive”,VALUE =“1/0”),所以每当我发布我的表单时,我都会得到上面的错误消息

我已经尝试了一些解决方案来克服这个问题,但它似乎没有正确地进行。

以下是我的代码库:

这里tblAuthorMaster是EF Class,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; }        

    }

提前致谢。

1 个答案:

答案 0 :(得分:1)

为了使其正常工作,下拉列表中的VALUE必须为true/false而不是1/0。既然你没有展示你如何产生你的宿舍,那很难提供帮助,但它可能看起来像这样:

<%= Html.DropDownListFor(
    x => x.Status,
    new[] 
    {
        new SelectListItem { Value = "true", Text = "active" },
        new SelectListItem { Value = "false", Text = "inactive" },
    }
) %>

使用具有2个可能值的下拉列表的重点是什么? HTML为您提供了用于此目的的复选框:

<%= Html.CheckBoxFor(x => x.Status) %>

最后一句话:您在问题中称为视图模型的内容根本不是视图模型。它是一个自动生成的EF域模型。视图模型是您根据给定视图的要求专门设计的类,它们不是由某些向导自动生成的。