【问题标题】:Partial validation of ASP.NET MVC 3 ModelsASP.NET MVC 3 模型的部分验证
【发布时间】:2011-03-06 14:41:05
【问题描述】:

我有一个非常大的 60 多个问题表格,用户可以开始填写、随时保存并保留它。表单可以从数据库中重新加载并随时完成,然后关闭。

我有以下型号:

public class Questionnaire{

  [Required]
  public string Question1 { get; set; }

  [Required]
  [Range(1, 10)]
  public int Quesiton2 { get; set; }

  public string Question3 {get;set}
}

当用户决定保存表单时,我需要部分验证我的模型并执行完整验证,包括在用户选择关闭表单时验证所需文件。

实现它的最佳方法是什么?

【问题讨论】:

    标签: asp.net-mvc validation


    【解决方案1】:

    从您的问题/示例中并不能完全清楚您需要什么,但我发现通常在 MVC 中拆分我的视图模型是处理这类事情的最佳方法。

    将您的实体分成几部分,每个部分都可以单独验证。

    然后使用分部视图/自定义编辑器模板为其中的每一个提供 UI 组件

    然后您可以在需要时将这些组件组合成一个表单,或者根据需要在同一页面上提供单独的表单、多页面向导或单页面渐进式 AJAX 向导或任何您想要的)。

    保持干燥和简单。

    关键是不要害怕在需要时添加额外的 View Models 层,以使您的数据对象符合 UI 的要求

    当您特别需要摆脱业务对象/实体时,不要受到它们的限制 - 将业务对象的各个部分从组成的视图模型部分重新组合在一起很容易。

    【讨论】:

      【解决方案2】:

      您为什么使用 Question1.. Questionn.. 每个问题 1 个对象,如果您添加一个新问题怎么办?...您应该有一个问题列表,然后根据您的业务规则在保存之前手动验证。

      【讨论】:

        【解决方案3】:

        您可以有两个单独的操作 Save() 和 Submit(),并在 Save() 上禁用验证(或进行最小验证)。

        【讨论】:

        • 这就是我的想法,在 Save() 操作中我会使用 ModelState.IsValid 但我应该如何实现 Submit() 操作验证?我希望在非空字段上验证除 [Required] 属性之外的所有属性
        【解决方案4】:

        按照 Bala R 的想法,最好根据您正在执行、保存或提交的操作执行条件验证。 我的意思是,在保存时,仅验证字段中的数据,因此检查空值/空值/默认值并且不验证这些字段,但根据业务逻辑/模型规则验证已输入的字段.

        所以,假设您有一个包含姓名、年龄和性别的表格,在尝试 1 时,用户填写他们的姓名为“1234”,年龄为“12”并将“性别”留空,当您保存时,您需要循环遍历每个控件并验证具有值的控件,在本例中为名称和年龄,然后您可以验证名称并报告“1234”不是有效名称,但接受年龄为 12。

        您可能会更好地处理此服务器端,就像您尝试验证此客户端一样,很难区分已留空的必填字段,以便稍后填写,一直留空白句号。 (您可能会争辩说您需要客户端 Save() 和 Submit() 验证函数来解决这个问题以及服务器端)。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-12-24
          • 1970-01-01
          • 1970-01-01
          • 2011-12-06
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-02-26
          相关资源
          最近更新 更多