Как я могу использовать Html.ValidationSummary с Ajax.BeginForm?

У меня есть форма 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 %>
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
5
0
3 655
1

Ответы 1

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

В качестве примера я использовал часть содержимого в файле .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 с идентификатором является внешним по отношению к партиалу.

Если бы вы могли немного расширить это, было бы здорово. Я думаю, что ваш ответ идет в правильном направлении, но мог бы быть более ясным.

Eric Schoonover 08.03.2009 20:22

Другие вопросы по теме