扩展MVC FoolProof验证

时间:2013-01-09 18:15:18

标签: regex asp.net-mvc asp.net-mvc-3 validation asp.net-mvc-validation

我想在我的MVC 3应用程序中使用 MVC FoolProof Validation

我需要数字验证,也接受N / A或n / a。所以我决定创建自己的自定义验证属性,如 NumericAllowNAAttribute ,并添加一个jQuery验证自定义采用者方法。

我重新访问MVC Foolproof并决定使用它,因为它已经有其他有用的方法构建。我也想要那些。现在我如何编写一个使用jQuery validate和Server端在客户端工作的CustomValidationAttribute?

搜索谷歌扩展MVC Foolproof我没有得到任何。

  

是否有人遇到过延伸或实施此类问题   验证在服务器和客户端使用jQuery验证插件吗?

1 个答案:

答案 0 :(得分:4)

你可以通过定义一个继承ContingentValidationAttribute的新属性(或者万无一失的其他属性之一,但是大陆非常接近准系统)来扩展万无一失的MVC。

您需要定义以下方法覆盖。

public override bool IsValid(object value, object dependentValue, object container)
protected override IEnumerable<KeyValuePair<string, object>> GetClientValidationParameters()
public override string ClientTypeName

ClientTypeName字符串值由jquery unobtrusive验证使用。

另外,请务必使用DataAnnotationsModelValidatorProvider注册适配器(在类的构造函数中使用它是万无一失的。)

DataAnnotationsModelValidatorProvider.RegisterAdapter(typeof(MyCustomValidationAttribute), typeof(FoolproofValidator));

一旦定义了服务器端验证逻辑,就需要在客户端注册jquery unobtrusive验证:

jQuery.validator.addMethod("clienttypenameyouemitontheserver", function(value, element, params) {
    // perform your checks here and return true or false
    return true; 
});

var $Unob = $.validator.unobtrusive;
$Unob.adapters.add("clienttypenameyouemitontheserver", ["param1", "param2", "paramZ"], function (options) {
    var value = {
        param1: options.params.param1,
        param2: options.params.param2,
        paramZ: options.params.paramZ
    };
    setValidationValues(options, "clienttypenameyouemitontheserver", value);
});