Я использую 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.