2012-11-20 1 views
5

Y a-t-il un problème en utilisant @Html.ValidationSummary() dans un formulaire Ajax.BeginForm?@ Html.ValidationSummary() ne fonctionne pas dans Ajax.BeginForm

J'ai le scénario suivant et je ne peux pas obtenir de validation pour les champs obligatoires. Le formulaire est juste posté et aucune erreur n'est levée non plus.

est la vue:

@using (Ajax.BeginForm("Register", "Account", new AjaxOptions { HttpMethod = "POST", OnSuccess = "closeDialog('RegistroUsuario')" })) 
{ 
    @Html.ValidationSummary() 
    <fieldset> 
     <legend>Cadastro novo Usuário</legend> 
     <table id="changePassword"> 
       <tr> 
        <td class="smallField">Username:</td> 
        <td>@Html.TextBoxFor(m => m.UserName)</td> 
       </tr> 
       <tr> 
        <td>Password:</td> 
        <td>@Html.PasswordFor(m => m.Password)</td> 
       </tr> 
       <tr> 
        <td>Repetir Senha:</td> 
        <td>@Html.PasswordFor(m => m.ConfirmPassword)</td> 
       </tr> 
       <tr> 
        <td>Email:</td> 
        <td>@Html.TextBoxFor(m => m.Email)</td> 
       </tr> 
       <tr> 
        <td>Pergunta Secreta:</td> 
        <td>@Html.TextBoxFor(m => m.SecretQuestion)</td> 
       </tr> 
           <tr> 
        <td>Resposta:</td> 
        <td>@Html.TextBoxFor(m => m.SecretQuestionPassword)</td> 
       </tr> 
       <tr> 
        <td>Ativo:</td> 
        <td><input type="checkbox" name="status" id="status" value="Ativo"></td> 
       </tr>  
      </table>   
    </fieldset> 
    <input type="submit" value="Criar Usuário" class="ui-button ui-widget ui-state-default ui-corner-all ui-button-text-only button-link"/> 
} 

Thats le contrôleur:

// 
    // POST: /Account/Register 
    [HttpPost] 
    public ActionResult Register(RegisterModel model) 
    { 
     if (ModelState.IsValid) 
     { 
      MembershipProvider mp = Membership.Provider; 
      MembershipCreateStatus Status;     

      // Tenta registrar o usuário 
      try 
      { 
       //Verifica se usuário deve estar ativo ou não no sistema 
       if (String.IsNullOrEmpty(Request.Form["status"])) 
       { 
        model.Active = false; 
       } 
       else 
       { 
        model.Active = true; 
       } 

       //Cria o usuário 
       MembershipUser newUser = mp.CreateUser(model.UserName, model.Password, model.Email, model.SecretQuestion, model.SecretQuestionPassword, model.Active, Guid.NewGuid(), out Status); 

       if (newUser == null) 
       { 
        /**/ 
       } 
       else 
       {      
        return RedirectToAction("Index", "Home"); 
       } 

      } 
      catch (MembershipCreateUserException e) 
      { 
       ModelState.AddModelError("", ErrorCodeToString(e.StatusCode)); 
      } 
     } 

     // If we got this far, something failed, redisplay form 
     return View(model); 
    } 

Et le modèle:

public class RegisterModel 
{ 
    [Required] 
    [Display(Name = "Usuário")] 
    public string UserName { get; set; } 

    [Required] 
    [Display(Name = "Email")] 
    public string Email { get; set; } 

    [Required] 
    [StringLength(100, ErrorMessage = "A {0} deve ter no mínimo {2} caracteres.", MinimumLength = 6)] 
    [DataType(DataType.Password)] 
    [Display(Name = "Senha")] 
    public string Password { get; set; } 

    [Required] 
    [DataType(DataType.Password)] 
    [Display(Name = "Repetir Senha")] 
    [Compare("Password", ErrorMessage = "As senhas não coincidem")] 
    public string ConfirmPassword { get; set; } 

    [Required] 
    [Display(Name = "Pergunta Secreta")] 
    public string SecretQuestion { get; set; } 

    [Required] 
    [StringLength(100, ErrorMessage = "A {0} deve ter no mínimo {2} caracteres.", MinimumLength = 6)] 
    [DataType(DataType.Password)] 
    [Display(Name = "Senha Pergunta Secreta")] 
    public string SecretQuestionPassword { get; set; } 

    [Required] 
    [Display(Name = "Ativo")] 
    public bool Active { get; set; } 
} 

Est-ce que je manque somenthing?

+0

Eh bien, qu'est-ce que votre débogueur vous dit? Est-ce que vous arrivez au 'return View (model)' du tout? Le résumé semble OK où il est. –

Répondre

7

J'ai trouvé le problème.

L'ID cible Ajax.Options n'a pas été défini. Une fois que j'ai mis à l'élément de validation dom maintenant je reçois les messages.

Merci beaucoup

+0

Qu'est-ce que "validation dom"? Quand j'ai joué avec votre exemple, je dois mettre UpdateTargetId à l'élément racine de la vue, que vous retournez par Controller et il le rendra entièrement –

+0

@Philipp, il s'agit d'un ancien projet. À ce moment-là, je travaillais sur ce projet, je n'avais aucune expertise sur ce que je faisais et j'ai trouvé une solution qui, je ne suis pas sûre que c'était la meilleure. J'ouvrirai ce projet à la nuit et je serai de retour avec toi. –

2

Pour être plus précis sur Guilherme Longo Réponse

Set AjaxOptions comme

new AjaxOptions() { HttpMethod = "Post", OnSuccess = "RefreshMethod", UpdateTargetId = "FormId" } 

Notez que le UpdateTargetId ensemble à formId. A travaillé pour moi Merci Guilherme

Questions connexes