У меня есть форма AJAX, которую я создаю в своем проекте MVC. Если форма отправляется с использованием обычной функции браузера и происходит обновление страницы, я получаю информацию о проверке, отображаемую в форме (встроенная проверка MVC на основе ViewData.ModelState).
Есть ли аналогичный механизм проверки для форм AJAX?
<% using (Ajax.BeginForm("Create", "GraphAdministration", new AjaxOptions()
{
OnSuccess = "newGraphSuccess",
OnFailure = "newGraphFailure",
HttpMethod = "POST"
}))
{ %>
<!-- some form stuff in here !-->
<% } //end form %>





Это действительно зависит от того, откуда вы получаете контент для отображения после публикации формы. Сводная информация о валидации создается на сервере, поэтому вы должны выполнять работу именно на нем.
В качестве примера я использовал часть содержимого в файле .ascx для рендеринга формы. Вы получаете форму на странице в первый раз, вызывая действие напрямую с помощью Html.RenderAction.
У вас будет ваш Ajax.BeginForm и т. д. В файле .ascx. Затем вызовите его прямо в действии.
Когда в браузере выполняется вызов Ajax, вы получаете сообщение для того же действия. Таким образом, вы можете выполнять все проверки на стороне сервера, как обычно. Вы должны настроить вызов Ajax, чтобы заменить исходную форму новым html, возвращаемым действием.
Одна вещь, о которой вы должны знать, это то, что заменяющий JavaScript заменит содержание элемента, а не сам элемент, поэтому запомните нам идентификатор окружающего элемента.
Приносим извинения, если это немного запутано, если вы хотите получить более подробную информацию, просто прокомментируйте, и я конкретизирую соответствующие части.
Все это предполагает, что вы выполняете всю проверку на сервере.
У вас будет View, в котором есть все содержимое страницы, а затем некоторое частичное содержимое в файле .ascx, здесь живет ваша форма ajax, ее необходимо настроить для замены содержимого по идентификатору. Проще всего, если оно будет иметь то же имя, что и действие, которое будет вызывать ваш ajax.
Вы можете использовать Html.RenderAction, чтобы получить его в просмотре. Вы также можете передавать данные с помощью других версий того же метода. По сути, вы вызываете его так же, как ваш код ajax.
Вам нужно будет обернуть все это в div с установленным идентификатором. Используйте этот идентификатор в партиале как заменяемый контент.
Когда вы визуализируете страницу, HTML-код формы и все элементы ajax будут вставлены.
Когда вызывается действие ajax, частичное содержимое будет возвращено при любой выполненной проверке. Он заменит содержимое div, которому вы присвоили идентификатор.
У вас могут быть разные версии действия, используя атрибуты [AcceptVerbs(HttpVerbs.Get)] и [AcceptVerbs(HttpVerbs.Post)].
Основная проблема этого метода заключается в том, что он не самодостаточен, div с идентификатором является внешним по отношению к партиалу.
Если бы вы могли немного расширить это, было бы здорово. Я думаю, что ваш ответ идет в правильном направлении, но мог бы быть более ясным.