0

I a récemment mis en validation à distance dans ma forme:les causes de validation à distance présentent des entrées (plusieurs de soumission de boutons) pour être null

ViewModel:

[Remote("IsTagUnique", "myController", "myArea", ErrorMessage = "This tag already exists.")] 
public string tag { get; set; } 

Controller:

 public ActionResult IsTagUnique(string tag) 
     { 
      using (db) 
      { 
       try 
       { 
        var myTag = db.ASAuftraege.Single(m => m.tag == tag); 
         return Json(false, JsonRequestBehavior.AllowGet); 
        }       
       } 
       catch (Exception) 
       { 
        return Json(true, JsonRequestBehavior.AllowGet); 
       } 
      } 
     } 

     [HttpPost] 
     [ValidateAntiForgeryToken] 
     public ActionResult myView(string Send){ 
      // doSomething 
     } 

Voir (appelé "myView")

@Html.TextBoxFor(m => m.tag) @Html.ValidationMessageFor(m => m.tag) 


<button class="form-button-submit" type="submit" name="Send" value="Send">Send</button> 

La validation fonctionne parfaitement bien. Problème: lorsque je clique sur le bouton Envoyer sans déclencher manuellement la validation sur le champ d'étiquette une fois en cliquant dans le champ et en cliquant ensuite ailleurs, la fonction "IsTagUnique" est exécutée avant la fonction myView(). Cela provoque mes entrées de soumission (j'ai effectivement plusieurs boutons d'envoi, tout comme celui montré dans la vue (nom différent/valeur de cours) pour être nul.Toute idée que je peux faire? J'ai essayé de déclencher la validation manuellement en donnant mise au point et le flou l'étiquette-champ, et en déclenchant un événement de changement ne déclenche pas la validation, bien que

Répondre

0

Après avoir cherché pendant un certain temps, j'ai découvert ce qui semble être un bug connu:..

Le problème se produit lorsqu'un formulaire qui utilise la méthode distante pour valider un champ.Si un bouton d'envoi est appuyé après le déclenchement du validateur, tout va bien et la demande contiendra la paire nom/valeur du bouton de soumission cliqué. la méthode est n'est pas déclenché avant que le bouton de soumission ne soit appuyé, la requête résultante ne contiendra PAS la valeur/paire du bouton de soumission.

Une solution qui a fonctionné pour moi est celui-ci:

$(function() { 
$('button[type=submit]').click(function() { 
    $('<input>').attr({ 
     type: 'hidden', 
     name: this.name, 
     value: this.value 
    }).appendTo($(this).closest('form')); 
}); 
}); 

Crédit arturoribes