Asp.net mvc 3 使用数据注释进行自定义模型验证MVC3 |虽然添加了属性并编写了jquery,但客户端未显示错误消息
我已经在模型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
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));