2009-10-18 4 views
9

Использование шаблона проекта MVC в VS2008 (из коробки) я заметил следующее:Ajax.BeginForm - Просмотр Validation Ошибки

  1. Вот как указана форма Register.aspx.

    <% using (Html.BeginForm()) { %> 
    
  2. Выбор кнопки «Регистрация» без предоставления информации об учетной записи показывает это. Создание учетной записи не увенчалось успехом. Исправьте ошибки и повторите попытку.

    • Необходимо указать имя пользователя.
    • Необходимо указать адрес электронной почты.
    • Вы должны указать пароль из 6 или более символов.

  3. Я изменил форму Register.aspx на это.

    <% using (Ajax.BeginForm("Register", new AjaxOptions { HttpMethod = "Post" })) { %> 
    
  4. Выбор кнопки регистрации без предоставления информации об учетной записи не содержит ошибок.

Вопрос: Как получить текст ошибки, отображаемый при использовании Ajax.BeginForm?

ответ

14

Чтобы успешно применить форму представления ajax, вам необходимо будет изменить действие Register и представления. По умолчанию в случае ошибки это действие просто возвращает связанное представление register.aspx. Первым шагом было бы поместить резюме проверки внутри частичного контроля пользователя:

ValidationSummary.ascx:

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

Затем вы включаете этот частичный внутри вида Register.aspx:

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

<% using (Ajax.BeginForm(new AjaxOptions { HttpMethod = "POST", UpdateTargetId = "validationSummary" })) { %> 
    FORM CODE HERE 
<% } %> 

И, наконец, вы измените действие в Реестре:

[AcceptVerbs(HttpVerbs.Post)] 
public ActionResult Register(string userName, string email, string password, string confirmPassword) 
{ 
    // ... skipped content for clarity 

    // If we got this far, something failed, redisplay form 
    if (Request.IsAjaxRequest()) 
    { 
     // If an ajax request was made return only the validation errors 
     // instead of the whole page 
     return PartialView("ValidationSummary"); 
    } 
    else 
    { 
     return View(); 
    } 
} 

В случае регистрации stration успешно по умолчанию действие Register просто перенаправляет на Home/Index. Вам также придется изменить этот бит, потому что, выполняя запрос ajax, перенаправление не будет работать. Точно так же вы можете проверить, если вы вызываете действие асинхронно и возвращаете некоторый текст, который указывает, что регистрация прошла успешно. Этот текст будет отображаться внутри того же div как ошибки проверки.


UPDATE:

Один последний вопрос - вместо списка пулевой сообщений об ошибках, как я получаю каждое сообщение управления ошибкой визуализации рядом с элементом управления с помощью Html. Метод ValidationMessage ("....") ?

Для достижения этой цели необходимо поместить содержимое вашей формы внутри частичный вид:

<% using (Ajax.BeginForm(
    "register", 
    null, 
    new AjaxOptions { 
     HttpMethod = "POST", 
     UpdateTargetId = "myForm" 
    }, 
    new { 
     id = "myForm" 
    })) { %> 
    <% Html.RenderPartial("RegisterForm"); %> 
<% } %> 

И в своем действии регистра делают правильный частичный:

if (Request.IsAjaxRequest()) 
{ 
    return PartialView("RegisterForm"); 
} 
else 
{ 
    return View(); 
}