Я реализовал пользовательскую проверку с использованием аннотации данных на модели, MVC 3. Также были реализованы jquery и сценарии для ненавязчивой проверки того же клиента, заботясь о перегрузке
public override IEnumerable<ModelClientValidationRule> 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 };
}
}
Сценарии JQuery приведены ниже.
''
(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