2009-10-18 6 views
9

Utilisation du modèle de projet MVC dans VS2008 (sur la boîte) j'ai remarqué les suivantes:Ajax.BeginForm - Affichage des erreurs de validation

  1. Voici comment la forme Register.aspx est spécifiée. La sélection du bouton Enregistrer sans fournir aucune information de compte montre ceci. La création du compte a échoué. Veuillez corriger les erreurs et réessayer.

    • Vous devez spécifier un nom d'utilisateur.
    • Vous devez spécifier une adresse e-mail.
    • Vous devez spécifier un mot de passe de 6 caractères ou plus.

  2. J'ai changé le formulaire Register.aspx pour cela.

    <% using (Ajax.BeginForm("Register", new AjaxOptions { HttpMethod = "Post" })) { %> 
    
  3. Sélection du bouton Enregistrer sans fournir une information de compte montre aucune erreur.

Question: Comment afficher le texte d'erreur lors de l'utilisation de Ajax.BeginForm?

Répondre

14

Pour appliquer avec succès une soumission de formulaire ajax, vous devez modifier l'action Enregistrer et les vues. Par défaut, en cas d'erreur, cette action renvoie simplement la vue register.aspx associée. La première étape serait de mettre le résumé de validation dans un contrôle utilisateur partiel:

ValidationSummary.ascx:

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

Ensuite, vous inclure cette partie dans la vue Register.aspx:

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

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

Et enfin vous modifiez l'action Enregistrer:

[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(); 
    } 
} 

En cas d'enregistrement réussit par défaut l'action Register vient de rediriger vers Home/Index. Vous devrez également modifier ce bit, car lorsque vous effectuez une requête ajax, la redirection ne fonctionnera pas. De la même manière, vous pouvez tester si vous appelez l'action de manière asynchrone et renvoyez du texte indiquant que l'enregistrement a réussi. Ce texte sera affiché à l'intérieur du même div que les erreurs de validation.


MISE À JOUR:

Une dernière question - Au lieu de la liste bullet des messages d'erreur, comment faire j'obtenir le rendu de chaque message d'erreur de contrôles à à côté du contrôle à l'aide du Html. ValidationMessage ("....") méthode ?

Pour ce faire, vous avez besoin de mettre le contenu de votre formulaire dans une vue partielle:

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

Et dans votre action de registre rendu correct partiel:

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