проверка пользовательских моделей с использованием аннотаций данных MVC3 | сообщения об ошибках не отображаются на стороне клиента, хотя свойства добавлены и jquery записан - PullRequest
1 голос
/ 26 декабря 2011

Я реализовал пользовательскую проверку с использованием аннотации данных на модели, 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

Ответы [ 2 ]

1 голос
/ 27 декабря 2011

Может быть, вы заменяете HTML?В этом случае вам нужно вызвать jQuery.validator.unobtrusive.parse ('form');после обновления html.

0 голосов
/ 28 декабря 2011

Спасибо всем за поддержку!

Наконец-то нашел ответ на этот вопрос!Используемые сценарии jquery версии 1.5.1 содержат ошибки, связанные с пользовательскими валидаторами на стороне клиента.

запустил обновление пакета nuget и обновил до 1.6.1, и он работает хорошо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...