【问题标题】:How to save invalid data?如何保存无效数据?
【发布时间】:2016-08-10 04:30:03
【问题描述】:

我们需要创建一个程序来收集运行表和其他表单数据。

所有表单都需要在输入时保存,除非明确丢弃,否则即使表单字段数据也是无效的。
用户应该始终能够“保存以备后用”,或者只是关闭他的窗口,并且应该保存数据。

问题是我必须对所有运行表进行索引和搜索,包括无效的。

我正在考虑几个选项:

  • 有一个实现验证的相同类型的子类(这可行吗?)
  • 将无效记录序列化为 XML 并将其存储在其他位置,直到其验证并永久保存。
  • 不使用验证属性,而只是自定义验证(即使用IValidatableObject 接口),如果记录中的另一个属性指示应跳过验证,则将绕过验证,但我最终可能会得到大量数据同一个表中的数据库,也许这不是问题,只要我控制。我真的在考虑这个选项。

我真正的疑问是:

  • 如果我将数据存储在其他地方,搜索将是一场噩梦
  • 如果我在外部运行时方法中进行验证,避免使用验证属性,数据库中的列将不会反映真实属性要求(即必填字段)。

我想我会选择这个选项,因为必须搜索两个表更让我烦恼,而且确实这些列不会那么严格,但我仍然可以设置它们的 MaxLength 和其他一些重要属性这对数据库结构至关重要,但不会真正干扰验证过程。
真的不是说我必须将日期时间存储为字符串或降低到那么低。

我只是想听听遇到类似情况的人,可能有一些流畅的魔法方法......

【问题讨论】:

  • 我会选择第二个选项
  • 但它必须包含在搜索结果中。颈部疼痛。
  • 你能实现一些“最终确定”阶段吗?例如,设置一个布尔值Final,当它为真时,进行严格验证?
  • 是的,这是我的问题。

标签: c# asp.net-mvc entity-framework validation data-annotations


【解决方案1】:

我想我会在模型中进行非常无干扰的验证(即 MaxLength 等),以及确定是否应在没有验证的情况下保存模型的属性,然后实现 IValidatableObject 我将实现所有所需的验证属性作为自定义自定义验证。

【讨论】:

    【解决方案2】:

    如何在用户浏览器中以字符串形式将它们全部保存为cookie(字符串不需要在客户端进行验证,除非您将其绑定到)。并且只需对您的数据库提交使用服务器验证。

    点击此处了解有关将数据保存到 cookie 中的更多信息:

    Storing multiple values in cookies

    正如我所说在您的模型中不使用客户端验证。

    为此,只需使用 ViewModel 并将 ViewModel 保存在 Cookie 中。然后在您的控制器上,当用户想要最终保存到数据库时验证它们。

    【讨论】:

    • OP 声明无效数据仍需要可索引和可​​搜索,因此可能仍需要将数据存储在服务器端。
    • 您可以将未经验证的数据保存为数据库中的字符串。并通过 ViewModel 或控制器使用您所需的验证来完成数据存储过程。
    • 如何去做的过程正是这个问题,不是吗?
    • 让我重新表述一下自己。例如,您将 DateTime 作为最终模型。您所做的就是将其保存为另一个类(数据库表)中的字符串并将其检查为临时数据。您可以在控制器中解析日期时间以分析使用情况。那么如果用户想要完成数据保存,那么它将与您的控制器上的验证一起保存。
    • @MRebati 如果我将其存储在外部表中,则问题从搜索和索引开始。
    猜你喜欢
    • 1970-01-01
    • 2013-01-10
    • 2021-05-11
    • 2021-05-11
    • 1970-01-01
    • 1970-01-01
    • 2019-04-22
    • 1970-01-01
    • 2021-04-13
    相关资源
    最近更新 更多