2012-05-18 2 views
1

J'ai utilisé un post ajax jQuery sur un formulaire généré à partir d'une vue MSAjax MVC 3 Razor.La validation côté client MVC 3 cesse de fonctionner après le POST

Dans cette forme, la validation côté client fonctionne correctement pendant la saisie, mais lorsque l'utilisateur génère un "POST" en cliquant sur le bouton "Search", la validation côté client s'arrête.

c'est le modèle:

public class AnagraficaSearchViewModel : ViewModelBase 
    { 
     [Required] 
     [StringLength(2)] 
     public virtual string Ricerca { get; set; } 
    } 

C'est le contrôleur:

[HttpPost] 
public ActionResult Index(AnagraficaSearchViewModel model) 
{ 
    if (model.Ricerca == "12") 
    { 
     model.Status = Status.Error; 
     model.Message = "Errore!"; 

     ModelState.AddModelError("", Cult.Testo(Cult.CultTextsIDs.StatusError));     
    } 

    if (Request.IsAjaxRequest()) return PartialView("SearchCriteria", model); 

    return View(model); 
} 

Ceci est la vue principale:

<div id="search-anagrafica-criteria"> 
    @{ Html.RenderPartial("SearchCriteria", Model); } 
</div> 

Et voici la SearchCriteria Vue:

@model AnagraficaSearchViewModel 

<script type="text/javascript"> 
    function CheckRow() { 
     $("form").valid(); 
     abs.message.convertErrorsToTooltips(); 
    }; 

    function InitSearch() { 
     $("#Ricerca").bind("propertychange keyup input paste", function() { 
      setTimeout("CheckRow();", 100); 
     }); 

     CheckRow(); 

     $("#Ricerca").focus(); 
    } 


    $(function() { 
     $('form').submit(function (e) { 
      e.preventDefault(); 

      var $form = $(this); 

      if (!$form.valid()) { 
       abs.message.convertErrorsToTooltips(); 
       return false; 
      } 

      $.validator.unobtrusive.parse($('form')); //added 

      if ($(this).valid()) { 
       $.ajax({ 
        url: this.action, 
        type: this.method, 
        data: $(this).serialize(), 
        success: function (result) { 
         $('#search-anagrafica-criteria').html(result); 
         InitSearch(); 
        }, 
        complete: function (result) { 
         CheckRow(); 
        } 
       }); 
      } 
      return false; 
     }); 

     InitSearch(); 
    }); 

</script> 

@using (Ajax.BeginForm("Index", "Anagrafica", null, new AjaxOptions { UpdateTargetId = "search-anagrafica-criteria", HttpMethod = "POST", OnComplete = "CheckRow()" })) 
{ 
    @Html.LabelFor(el => el.Ricerca) 
    @Html.TextBoxFor(el => el.Ricerca) 
    @Html.ValidationMessageFor(el => el.Ricerca) 

    <button class="btn btn-primary" type="submit" style="margin-left: 10px">Search</button> 

    @Html.ValidationSummary(true)  
} 

Beaucoup d'heures de travail et rien n'a changé !!

Nous vous remercions de votre aide!

+0

Avez-vous essayez de supprimer .validator.unobtrusive.parse $ (('forme')); de l'endroit d'origine et placez-le après tout votre code de vue ... c'est à dire, ajoutez le code suivant juste avant de fermer votre AjaxForm parantesis ... NiK

+0

Même si vous avez déplacé son emplacement, la méthode d'analyse ne renverra pas la validation discrète si vous ne supprimez pas les éléments de données en premier. –

Répondre

2

Utilisez les commandes suivantes à la place:

 $('form').removeData("validator"); 
     $('form').removeData("unobtrusiveValidation"); 
     $.validator.unobtrusive.parse('form'); 
+0

Votre suggestion ne résout pas le problème. Et votre code ajoute un

Questions connexes