Конфликт между Jquery Validate и Asp.net MVC - PullRequest
0 голосов
/ 29 мая 2010

Я использую asp.net mvc 2.0 и jquery validate 1.7 (http://bassistance.de/jquery-plugins/jquery-plugin-validation/)

Что происходит, это. Пользователь может щелкнуть ссылку для редактирования продукта. Когда пользователь щелкает продукт, который он хочет редактировать, появляется диалоговое окно jquery с формой текстовых полей и раскрывающихся списков.

Эти элементы управления html заполнены информацией. Скажем, если пользователь решит редактировать продукт Ipad, появится диалоговое окно, и в одном из текстовых полей формы будет «Ipad».

Теперь эта форма отображается на стороне сервера (форма находится в частичном представлении). При загрузке диалогового окна делается запрос ajax, чтобы получить это частичное представление, и в ответной части вызова ajax я делаю что-то вроде

$('#EditDialog).html(ajaxresponse).dialog({...});

Так что я хотел бы сделать что-то подобное в моем диалоговом окне

<form id="EditProduct">
Product Name: <input type="text"  value="IPad" name="ProductName" />
</form> 

Теперь моя проверка jquery будет выглядеть примерно так.

 $("#EditProduct").validate(
           {
               errorContainer: "#Errorbox",
               errorLabelContainer: "#Errorbox ul",
               wrapper: "li",
               rules:
               {
                   ProductName: "required"
               }
           });

Так что я знаю, что это работает, потому что я использую ту же самую проверку для добавления продукта, и если вы попытаетесь оставить ProductName пустым, это покажет ошибку проверки.

Теперь он не работает с редактируемым, хотя, я думаю, я знаю причину, но не как это исправить.

Значение для текстового поля - «IPad», это то, как Html.TextBoxFor() отображает его. Однако, если пользователь заходит и меняет название продукта на «Iphone» или оставляет пустым, значение никогда не меняется. Это всегда «Ipad» в HTML.

Так что я думаю, что когда валидатор идет и смотрит, он идет, о, там уже есть значение. Он действителен, хотя на самом деле он может быть пустым.

Когда я отправляю сообщение на сервер через ajax, оно получает правильное значение, и проверка на стороне сервера останавливает его, но вся проверка на стороне клиента оказывается бесполезной из-за этой проблемы, поскольку она никогда не изменит html.

1 Ответ

1 голос
/ 29 мая 2010

Это не совсем верно!

Представьте, что в случае "добавления" HTML-код, который вы отображаете, выглядит примерно так:

<form id="AddProduct">
Product Name: <input type="text"  value="" name="ProductName" />
</form>

Таким образом, у "HTML" есть пустое значение, но плагин проверки может правильно сказать, когда ProductName был заполнен?

Я не совсем уверен, в чем проблема, но если у вас есть отладчик (например, Firebug), попробуйте поместить разрыв в плагин проверки в функции "check" (~ строка 475 в 1.6). Вы должны быть в состоянии посмотреть element.value, чтобы увидеть, вычислило ли оно правильное значение, отредактированное пользователем.

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