技术开发 频道

MVC框架开发Web论坛之另类表单校验篇

 【IT168 技术文档】
   一、 简介


  在上一篇文章中,我描述了如何在一个MVC应用程序中借助于定制校验属性来从服务器端对表单域执行校验。通过使用属性(例如RequiredValidator和RegularExpressionValidator属性)来修饰你的模型,你可以强制实施指定的校验规则并显示定制的校验错误消息。

  为了执行更复杂的校验,我曾推荐使用一个CustomValidator校验器,你可以把它应用于实体类的校验。这个CustomValidator类是通过指向另一个类来最终执行定制的校验规则的。

  但是,如果进行更细致的分析,你会发现上述这个方法在应用于大多数场所下实现定制校验时还是比较复杂的。因此,大多数开发人员可能更喜欢使用属性的方法进行校验,但是,是否还存在更容易的方法进行定制校验呢?

  在本篇中,我将采用与上面稍微不同的方法来处理表单校验的问题。具体地说,我将把Scott Guthrie所描述的命令式方法和上面的属性方法结合到一起。换句话说,我将混合使用命令式和声明性方法来完成表单域的校验。我称这个方法为实现表单校验的混合方法。

  二、 使用命令式方法进行表单校验

  让我们首先开始讨论Scott Guthrie所描述的方法。当使用这个方法进行表单校验时,你必须创建下列类:
? IRuleEntity—这是为了进行校验每一个实体都必须实现的一个接口。
? RuleViolation—这是一个描述校验错误的类。
? RuleViolationException—这是当一个实体校验失败时引发的一个异常类。
? Validation—这是类中包括了一个方法,用于把校验规则复制到ModelState中。

  首先,上面这个IRuleEntity接口是相当简单。它仅包含了两个方法,名字为Validate()和GetRuleViolations()。列表1中提供了这个接口的实现代码。
列表1–IRuleEntity.cs

using System.Collections.Generic;

namespace MvcValidation
{
    
public interface IRuleEntity
    {
        List
<RuleViolation> GetRuleViolations();
        
void Validate();
    }
}

  该RuleViolation类描述了一个特定的校验错误。在此,使用了一个RuleViolations的集合来描述所有的校验错误(当提交一个表单时可能发生)。列表1中提供了该RuleViolation类的实现代码。

0
相关文章