2013-09-17 2 views
0

У меня есть проект MVC4, который использует ненавязчивую проверку, но для одного раздела я использую knockoutjs.плагин проверки jquery не работает с ненавязчивым js ссылкой

У меня есть установочный нокаут, чтобы использовать плагин проверки jquery, но когда я вызываю $ («form»). Valid(), он не ведет себя так, как ожидалось.

У меня есть нокаутирующий рендеринг таблицы в форме, которая будет содержать несколько строк для проверки. Первая строка таблицы должна игнорироваться при проверке и используется для добавления новых объектов в список. Я дал каждому объекту в первой строке класс «firstRow»

Я установки валидатора как таковой

var validator = $("form").validate({ 
       ignore: ".firstRow" 
      }); 

, но когда я называю

$("form").valid() 

Я заметил, что все элемент, являются недействительными (включая первую строку), добавляя к ним добавленную к классу «ошибку ввода-проверки».

Во-первых, я бы ожидал, что эта первая строка будет проигнорирована.

Во-вторых, я не ожидал, что этот класс будет применен, поскольку это ненавязчивая проверка делает это. Я ожидал бы, что класс «ошибка» будет применяться вместо него из плагина проверки jquery.

Когда я исключаю ссылку на jquery.validation.unobtrusive.js, тогда все работает, но я не могу этого сделать, поскольку это необходимо для остальной части сайта.

Я думаю, что это код, выполняемый каким-то образом из jquery.validation.unobtrusive, но я хотел бы знать, как остановить это от выполнения?

function validationInfo(form) { 
    var $form = $(form), 
     result = $form.data(data_validation), 
     onResetProxy = $.proxy(onReset, form); 

    if (!result) { 
     result = { 
      options: { // options structure passed to jQuery Validate's validate() method 
       errorClass: "input-validation-error", 
       errorElement: "span", 
       errorPlacement: $.proxy(onError, form), 
       invalidHandler: $.proxy(onErrors, form), 
       messages: {}, 
       rules: {}, 
       success: $.proxy(onSuccess, form) 
      }, 
      attachValidation: function() { 
       $form 
        .unbind("reset." + data_validation, onResetProxy) 
        .bind("reset." + data_validation, onResetProxy) 
        .validate(this.options); 
      }, 
      validate: function() { // a validation function that is called by unobtrusive Ajax 
       $form.validate(); 
       return $form.valid(); 
      } 
     }; 
     $form.data(data_validation, result); 
    } 

    return result; 
} 
+1

Вы смотрели в [Knockout-Validation] (http://stackoverflow.com/questions/8996449/knockout-validation)? – nwayve

+0

У меня еще нет примеров на странице knockoutjs с использованием jquery validator. –

ответ

0

Я в конечном итоге раскалывается пучки и положить jquery.validator файлы вместе и ненавязчивые файлы в другой связке.

Затем в моем файле макета я использовал Viewbag, чтобы проверить, должен ли быть включен пакет для ненавязчивых файлов.

По умолчанию он будет включать в себя, если только Viewbag.ExcludeUnobtrusive == true, который будет установлен на страницах, на которых я не хочу писать ненавязчивые ссылки на сценарии.

файл макета

@{ 
var includeUnobtrusive = ViewBag.ExcludeUnObtrusive == null || ViewBag.ExcludeUnObtrusive == false; 
} 
.... 
.... 
@if (includeUnobtrusive) 
{ 
    @Scripts.Render("~/bundles/jqueryunobtrusive") 
} 
Смежные вопросы