2012-11-20 5 views
5

Ajax.BeginFormフォーム内に@Html.ValidationSummary()を使用して問題がありますか?@ Html.ValidationSummary()はAjax.BeginForm内では機能しません

私は次のようなシナリオをとっており、必要なフィールドの検証はできません。フォームはただ掲示され、エラーもスローされません。コントローラThat's

@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"/> 
} 

// 
    // 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); 
    } 

とモデル:

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; } 
} 

私は足りないsomenthing

これは見るのですか?

+0

まあ、あなたのデバッガはあなたに何を伝えますか?あなたは '返されたビュー(モデル)'にまったく行きますか?それはどこにあるのか分かりません。 –

答えて

7

問題が見つかりました。

Ajax.OptionsターゲットIDが設定されていません。検証DOM要素を設定すると、メッセージが表示されます。たくさん

+0

「検証DOM」とは何ですか?私があなたの例を演奏したとき、私はUpdateTargetIdをコントローラの返すビューのルート要素に設定しなければならず、それは完全に再レンダリングします。 –

+0

@Philipp、これは古いプロジェクトです。そのとき私はそのプロジェクトに取り組んでいました。自分が行っていたことについて専門知識を持っていなかったので、それが最良のものかどうかわからない解決策を見つけました。私はそのプロジェクトをniteで開き、私はawnserであなたに戻ってきます。 –

2

おかげでギリェルメロンゴに具体的に

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

お知らせフォームIDにUpdateTargetIdセットとして

セットAjaxOptions回答。ありがとうGuilherme

関連する問題