2011-01-21 4 views
1

Я пытаюсь использовать плагин jQuery Validator с WebForms. Вот мой код JQuery:jQuery Validator # remote с ASP.NET WebForms

$("input[id$=FromZip]").rules('add', { 
    required: true, 
    postalCode: true, 
    remote: { 
      url: "shipping companies.aspx/ValidatePostalCode", 
      type: "POST", 
      contentType: "application/json; charset=utf-8", 
      dataType: 'json', 
      data: "{'postalCodeToValidate': '" + $("input[id$=FromZip]").val() + "'}", 
      dataFilter: function(data) { return (JSON.parse(data)).d; } 
    }, 
    messages: { 
     required: '"From" zip code is required.', 
     postalCode: 'Invalid "From" zip code', 
     remote: 'The "From" zip code was not found in the database.' 
    } 
}); 

Проблема с этим состоит в том, что val() всегда возвращает пустой, так что значение всегда быть помечены как ложные. Я попытался окружив его в вызове функции, например, так:

remote: function() { 
    var r = { 
     url: "shipping companies.aspx/ValidatePostalCode", 
     type: "POST", 
     contentType: "application/json; charset=utf-8", 
     dataType: 'json', 
     async: false, 
     data: "{'postalCodeToValidate': '" + $("input[id$=FromZip]").val() + "'}", 
     dataFilter: function(data) { return (JSON.parse(data)).d; } 
    } 
} 

За исключением теперь WebMethod не вызывается вообще никаких запросов Ajax не делается, в то время как раньше (без var r = {} материала) вызов был быть но передавая пустые данные вместо значения из текстового поля. Я пытался понять это в течение большей части дня.

Любые предложения?

+1

Так что я, кажется, решил его частично путем создания пользовательского метода вместо использования удаленного, но теперь это маркировки поле недействительным, даже если ответ я получаю назад с сервера: {"d": "true"}. Даже жесткое кодирование значения «True» в пользовательском методе по-прежнему помещает поле как недопустимое! –

+0

Я смог исправить это, создав переменную, назначив эту переменную в обработчике метода успеха, а затем проверив значение вне вызова Ajax. Странно, и есть почти наверняка лучший способ справиться с этим, но он решен. –

+0

Такая же проблема со мной, я изменил использование пользовательского метода вместо удаленного. Один улов для этого настраиваемого метода - вам может потребоваться установить айхакс-вызов async: false, иначе валидатор будет всегда показывать false. вот где я получил идею http://stackoverflow.com/questions/7966209/jquery-custom-validators-do-not-validate-on-keystroke – Zayar

ответ

0

Вы можете написать функцию удаленного типа, что

remote: function() { 
     var value = $('#FromZip').val(); 
     var r = { 
      contentType: "application/json; charset=utf-8", 
      data: JSON.stringify({ 'postalCodeToValidate': value }), 
      type: 'POST', 
      dataType: 'json', 
      url: 'shipping companies.aspx/ValidatePostalCode', 
      dataFilter: function(data) { return $.parseJSON(data).d; } 
     }; 
     return r; 
    }