#ajax #asp.net-mvc-3 #validation #actionlink
#ajax #asp.net-mvc-3 #проверка #actionlink
Вопрос:
Проект Net MVC 3.0
У меня есть форма на моей странице и Ajax.ActionLink, который добавляет другой набор полей в текущую форму, и это повторяющийся процесс, пока пользователь продолжает нажимать на ActionLink, он будет продолжать добавлять все больше и больше полей в форму.
Вот моя ссылка на действие Ajax
@Ajax.ActionLink("Add Another ERx", "ERxView", "Medication", new AjaxOptions
{
UpdateTargetId = "accordion",
InsertionMode = InsertionMode.InsertAfter,
HttpMethod = "POST",
OnBegin = "destroyAccordion",
OnSuccess = "createAccordion"
}, new { @class = "standard button", id = "AnotherErx", onclick = "document.ERxForm.submit();"})
Моя проблема в том
Когда пользователь нажимает на ссылку, он должен сначала проверить текущую форму для всех обязательных полей, только после успешной проверки он должен добавить новый набор полей в форму.
Я пробовал что-то подобное в моем Ajax.ActionLink для проверки текущей формы при нажатии на ActionLink
onclick = "document.ERxForm.submit();"
это запускает проверку формы, но независимо от проверки она продолжает добавлять новый набор полей в форму.
Может ли кто-нибудь мне помочь, как я могу этого добиться
Спасибо всем, кто нашел время, чтобы прочитать мой вопрос.
Ответ №1:
Проблема, скорее всего, заключается в том, что вы добавляете новые элементы для проверки. Если вы добавляете новые элементы проверки через AJAX, необходимо очистить и повторно проанализировать все атрибуты проверки на странице, например:
$("form").removeData("validator");
$("form").removeData("unobtrusiveValidation");
$.validator.unobtrusive.parse("form");
Добавьте это в свою OnSuccess
функцию, и проверка будет работать для всех элементов на странице, оригинальных и добавленных.
Комментарии:
1. ваш ответ мне в некоторой степени помогает. Но как я могу убедиться, что мое действие контроллера не будет вызываться до тех пор, пока эта проверка не будет выполнена верно.?
2. Я пропустил, что вы выполняете отправку как часть вашей ActionLink. Почему? Отправка мешает процессу проверки. Я предлагаю удалить
onclick
событие из ActionLink, поскольку я не вижу, какой цели оно служит. Это определенно портит процесс проверки.
Ответ №2:
OnBegin = "destroyAccordion"
Сделайте так, чтобы функция destroyAccordion вызывала функцию проверки и возвращала true или fals.
Если это верно, то выполняется ссылка на действие.