【问题标题】:Overload EF Validation with Custom class使用自定义类重载 EF 验证
【发布时间】:2012-09-24 07:54:41
【问题描述】:

我正在使用实体框架,并且有一个视图,它是 tblAuthorMaster 类型的强类型视图模型。在 Post ModelState 上返回以下错误:

值“0”对状态无效。

这里的状态是 DB/EF 中的布尔数据类型,查看它的下拉列表(TEXT="active/inactive", VALUE="1/0"),所以每当我发布我的表单时,我都会收到上述错误消息.

我已经尝试了一些解决方案来解决这个问题,但它似乎无法正常工作。

以下是我的代码库:

这里 tblAuthorMaster 是 EF 类,AuthorModel 是我的自定义类,我将其用于一些自定义验证和其他内容。

[元数据类型(typeof(AuthorModel))] 公共部分类 tblAuthorMaster { } 公共类 AuthorModel { [必需(错误消息 =“*”)] 公共字符串作者姓名 { 获取;放; } [必需(错误消息 =“*”)] 公共布尔状态{获取;放; } }

提前致谢。

【问题讨论】:

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


    【解决方案1】:

    要使其正常工作,下拉列表中的 VALUE 必须是 true/false 而不是 1/0。由于您尚未展示如何生成 doropdown,因此很难提供帮助,但它可能看起来像这样:

    <%= 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 域模型。视图模型是您专门为给定视图的要求设计的类,它们不是由某些向导自动生成的。

    【讨论】:

    • 将值设置为 true/false 可以正常工作,但为什么不使用 1/0。
    • 因为在 .NET 中,布尔类型可以具有值 truefalse,而不是 10,这与其他一些语言(例如 javascript)相反。当默认模型绑定器尝试将请求中的值解析为布尔值时,它会失败并将错误消息添加到ModelState
    • 谢谢 Darin 实际上我正在寻找其他选项,其中包括我的 AuthorModel 类中的一些更改。你能推荐类似的东西吗???
    • 是的,如果您想绑定到10,请使用Integer 而不是Boolean。这当然是一种非常错误的做法。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-07-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-05
    相关资源
    最近更新 更多