ASP.NET MVC AJAX с HTML.ValidationMessageFor - PullRequest
7 голосов
/ 02 августа 2010

Я привык к тому, что ASP.NET Webforms - простой способ создания AJAX с помощью UpdatePanels. Я понимаю, что этот процесс гораздо сложнее с MVC.

В конкретном случае я использую аннотации данных для проверки некоторых входных данных формы. Я использую помощник HTML.ValidationMessageFor, чтобы показать сообщение об ошибке. Если я хочу использовать AJAX, чтобы опубликовать эту форму и показать это сообщение об ошибке, каков будет процесс? Можно ли сохранить HTML.ValidationMessageFor и заставить его работать с AJAX?

Спасибо.

Ответы [ 2 ]

5 голосов
/ 05 сентября 2010

Используете ли вы встроенные методы AJAX? Например, вы создали форму AJAX с Ajax.BeginForm(...)? Если это так, то очень легко показать сообщения проверки.

Еще одна вещь: вы хотите отображать сообщение проверки для каждого отдельного неверного элемента управления , или вы просто хотите, чтобы сводка проверки была выше вашей формы? Я уверен, что вы спрашиваете об отображении отдельного сообщения для каждого элемента управления, но я включу оба на всякий случай.


Чтобы отобразить отдельное сообщение для каждого неверного элемента управления:

Во-первых, вам нужно поместить входные данные формы в частичное представление . Я назову это Частичное представление RegisterForm.ascx.

Далее, у вас должно быть что-то вроде на ваш взгляд :

<% using (Ajax.BeginForm("MyAction", null, 
    new AjaxOptions { 
        HttpMethod = "POST", 
        UpdateTargetId = "myForm" 
    }, 
    new { 
        id = "myForm" 
    })) { %>

     <% Html.RenderPartial("RegisterForm"); %>

<% } %>

Наконец, ваше действие контроллера должно выглядеть примерно так:

[AcceptVerbs(HttpVerbs.Post)]
public ActionResult MyAction(CustomViewModel m)
{
    if(!m.IsValid) //data validation failed
    {
        if (Request.IsAjaxRequest()) //was this request an AJAX request?
        {
            return PartialView("RegisterForm"); //if it was AJAX, we only return RegisterForm.ascx.
        }
        else
        {
            return View();
        }
    }
}

Чтобы отобразить только резюме проверки над формой:

Сначала необходимо создать отдельное частичное представление ValidationSummary . Вот как должен выглядеть код ValidationSummary.ascx:

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl" %>
<%= Html.ValidationSummary("Form submission was unsuccessful. Please correct the errors and try again.") %>

Далее, внутри вашего представления , у вас должно быть что-то вроде этого:

<div id="validationSummary">
    <% Html.RenderPartial("ValidationSummary"); %>
</div>

<% using (Ajax.BeginForm("MyAction", new AjaxOptions { HttpMethod = "POST", UpdateTargetId = "validationSummary" })) { %>
    <!-- code for form inputs goes here -->
<% } %>

Наконец, ваше действие контроллера должно выглядеть следующим образом:

[AcceptVerbs(HttpVerbs.Post)]
public ActionResult MyAction(CustomViewModel m)
{
    if(!m.IsValid) //data validation failed
    {
        if (Request.IsAjaxRequest()) //was this request an AJAX request?
        {
            return PartialView("ValidationSummary"); //if it was AJAX, we only return the validation errors.
        }
        else
        {
            return View();
        }
    }
}

Надеюсь, это поможет!

1 голос
/ 11 августа 2010

Эта статья может быть полезна: Блог ScottGu: ASP.NET MVC 2: Проверка модели .

Проверка, используемая в MVC, может быть как на стороне клиента, так и на стороне сервера.Чтобы включить проверку на стороне клиента, используйте объявление:

 <% Html.EnableClientValidation(); %>

где-то в вашем представлении.Это исключает необходимость использования AJAX для отправки формы на сервер и последующего отображения результатов в ней, поскольку пользователи с включенным javascript будут иметь собственную проверку на стороне клиента.

...