首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用数据注释的自定义模型验证MVC3 |虽然添加了属性并编写了jquery,但客户端上没有显示错误消息

使用数据注释的自定义模型验证MVC3 |虽然添加了属性并编写了jquery,但客户端上没有显示错误消息
EN

Stack Overflow用户
提问于 2011-12-26 18:44:37
回答 2查看 870关注 0票数 1

我已经在模型MVC3上实现了一个使用数据注解的自定义验证。

public override IEnumerable<ModelClientValidationRule> GetClientValidationRules()也是如此。但是对于错误的值,仍然没有显示错误消息和样式。

我检查了我的脚本和jquery,它们正在注册中(在其中放置警报以进行确认)。

请帮帮忙。

服务器端代码如下

代码语言:javascript
运行
复制
    public class SQLInjectionAttribute : ValidationAttribute
{
    private readonly string[] CheckParametersToValidateAgainst = ConfigurationManager.AppSettings["SQLINJECTIONCHARACTERS"].ToString().Split(' ');

    public SQLInjectionAttribute()
    {

    }

    protected override ValidationResult IsValid(object value, ValidationContext validationContext)
    {
        if (value != null)
        {

            if (CheckIfValidSafeString((string)value))
            {
                return new ValidationResult("blah blah");   
            }
        }
        return ValidationResult.Success;
    }

    private bool CheckIfValidSafeString(string SampleString)
    {            

        foreach (string CheckParameter in CheckParametersToValidateAgainst)
        {
            if(SampleString.ToLower().Contains(CheckParameter))
            {
                return false;
            }
        }

        return true;
    }
}



/// </summary>
public class SQLInjectionValidator : DataAnnotationsModelValidator<SQLInjectionAttribute>
{
    string CheckParametersToValidateAgainst = ConfigurationManager.AppSettings["SQLINJECTIONCHARACTERS"].ToString();
    string errorMsg = string.Empty;

    public SQLInjectionValidator(ModelMetadata metadata, ControllerContext context, SQLInjectionAttribute attribute)
        : base(metadata, context, attribute)
    {
        errorMsg = attribute.ErrorMessage;
    }

    /// <summary>
    /// The class 'ModelClientValidationRule' is a base class container for client validation rule sent to the browser.
    /// </summary>
    /// <returns></returns>
    public override IEnumerable<ModelClientValidationRule> GetClientValidationRules()
    {
        ModelClientValidationRule validationRule = new ModelClientValidationRule();
        validationRule.ErrorMessage = errorMsg;
        validationRule.ValidationType = "sqlinjectionvalidator";
        validationRule.ValidationParameters.Add("parameterstovalidateagainst", CheckParametersToValidateAgainst);
        return new[] { validationRule };

    }
} 

JQuery脚本如下所示。

'`

代码语言:javascript
运行
复制
(function ($) {

var isValid =  function (value, element, params) {

        var str = "; \' -- /* */ xp_";
        var parametersToValidateAgainst = str.split(" ");

        for (i = 0; i < parametersToValidateAgainst.length; i++) {
            if (value.indexOf(parametersToValidateAgainst[i]) != -1) {
             alert('false');   
                return false;
            }


        }
         alert('true');   
        return true;
    }

    $.validator.addMethod("sqlinjectionvalidator", isValid)

    $.validator.unobtrusive.adapters.add("sqlinjectionvalidator", ["parameterstovalidateagainst"],
    function (options) {
    debugger;
    alert('adapter added');
        options.rules['sqlinjectionvalidator'] = {
            parameterstovalidateagainst: options.params.parameterstovalidateagainst,               
        };
        options.messages['sqlinjectionvalidator'] = options.message;
    });


} (jQuery));

`

提前感谢

Anand

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-12-28 14:19:54

感谢大家的支持!

终于找到了这个问题的答案!使用的jquery脚本是1.5.1版,它在处理客户端的自定义验证器时存在一些错误。

运行nuget包升级并更新到1.6.1,运行良好。

票数 0
EN

Stack Overflow用户

发布于 2011-12-27 20:35:12

也许你正在取代HTML?在这种情况下,您需要在更新html之后调用jQuery.validator.unobtrusive.parse(‘form’);。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8634986

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档