Как выполнить ASP.Net MVC Ajax.ActionLink только после проверки?

#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.
Если это верно, то выполняется ссылка на действие.