Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 3 使用数据注释进行自定义模型验证MVC3 |虽然添加了属性并编写了jquery,但客户端未显示错误消息_Asp.net Mvc 3_C# 4.0_Validation_Unobtrusive Validation - Fatal编程技术网

Asp.net mvc 3 使用数据注释进行自定义模型验证MVC3 |虽然添加了属性并编写了jquery,但客户端未显示错误消息

Asp.net mvc 3 使用数据注释进行自定义模型验证MVC3 |虽然添加了属性并编写了jquery,但客户端未显示错误消息,asp.net-mvc-3,c#-4.0,validation,unobtrusive-validation,Asp.net Mvc 3,C# 4.0,Validation,Unobtrusive Validation,我已经在模型MVC3上使用数据注释实现了自定义验证。此外,还增强了jquery和脚本,用于对其进行非结构化的客户机验证,注意克服 public重写IEnumerable GetClientValidationRules()。但仍然没有显示错误值的错误消息和样式 我检查了我的脚本和jquery,它们正在被注册(在其中放置警报以确认) 请帮忙 下面是服务器端代码 public class SQLInjectionAttribute : ValidationAttribute { pr

我已经在模型MVC3上使用数据注释实现了自定义验证。此外,还增强了jquery和脚本,用于对其进行非结构化的客户机验证,注意克服

public重写IEnumerable GetClientValidationRules()
。但仍然没有显示错误值的错误消息和样式

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

请帮忙

下面是服务器端代码

    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 };

    }
} 
公共类SQLInjectionAttribute:ValidationAttribute
{
私有只读字符串[]CheckParametersToValidateAgainst=ConfigurationManager.AppSettings[“SQLINJECTIONCHARACTERS”].ToString().Split(“”);
公共SQLInjectionAttribute()
{
}
受保护的重写ValidationResult有效(对象值,ValidationContext ValidationContext)
{
if(值!=null)
{
if(checkIffalidSafestring((字符串)值))
{
返回新的ValidationResult(“废话”);
}
}
返回ValidationResult.Success;
}
私有bool CheckIfValidSafeString(字符串示例字符串)
{            
foreach(CheckParametersToValidateAgainst中的字符串CheckParameter)
{
if(SampleString.ToLower().Contains(CheckParameter))
{
返回false;
}
}
返回true;
}
}
/// 
公共类SQLInjectionValidator:DataAnnotationsModelValidator
{
string CheckParametersToValidateAgainst=ConfigurationManager.AppSettings[“SQLINJECTIONCHARACTERS”].ToString();
string errorMsg=string.Empty;
公共SQLInjectionValidator(ModelMetadata元数据、ControllerContext上下文、SQLInjectionAttribute属性)
:base(元数据、上下文、属性)
{
errorMsg=attribute.ErrorMessage;
}
/// 
///类“ModelClientValidationRule”是发送到浏览器的客户端验证规则的基类容器。
/// 
/// 
公共重写IEnumerable GetClientValidationRules()
{
ModelClientValidationRule validationRule=新建ModelClientValidationRule();
validationRule.ErrorMessage=errorMsg;
validationRule.ValidationType=“sqlinjectionvalidator”;
validationRule.ValidationParameters.Add(“parameterstovalidateagainst”,CheckParametersToValidateAgainst);
返回新的[]{validationRule};
}
} 
JQuery脚本如下所示

"`

(函数($){
var isValid=函数(值、元素、参数){
var str=“;\”--/**/xp\u1”;
var参数stovalidategainst=str.split(“”);
对于(i=0;i
`

提前谢谢


Anand

也许您正在替换HTML?在这种情况下,您需要调用jQuery.validator.unobtrusive.parse('form');更新html后。

可能您正在替换html?在这种情况下,您需要调用jQuery.validator.unobtrusive.parse('form');更新html后。

谢谢您的支持

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


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

感谢所有支持

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


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

伙计们感谢一些帮助…伙计们感谢一些帮助…感谢Sergy的想法,我的HTML是静态的。此外,我刚刚偶然发现了我的客户机验证失败的原因,PFB感谢Thinks Sergy,我的HTML是静态的。此外,我刚刚偶然发现了我的客户验证失败的原因,PFB
(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));