Quelle est la bonne façon de procéder à la validation de formulaires AJAX multiparamètres avec jQuery et ASP.NET MVC?
-
06-07-2019 - |
Question
J'ai un formulaire d'inscription pour un site Web qui doit vérifier si une adresse électronique existe déjà pour un identifiant d'entreprise donné. Lorsque l'utilisateur clique ou quitte le champ de courrier électronique (événement de flou), je veux que jQuery s'éteigne et fasse une demande AJAX afin que je puisse ensuite avertir l'utilisateur dont il a besoin pour choisir une autre adresse.
Dans mon contrôleur, j'ai une méthode comme celle-ci:
public JsonResult IsEmailValid(int companyId, string customerNumber)
{
return Json(...);
}
Pour que cela fonctionne, je devrai mettre à jour mes itinéraires afin qu'ils pointent directement vers / Home / IsEmailValid
et les deux paramètres {companyId}
et {customerNumber }
. Cela semble être "hacking". dans le système de routage et je suppose qu’il existe peut-être une alternative plus propre.
Y a-t-il un "bon" " ou un moyen recommandé pour accomplir cette tâche?
EDIT: Ce que je voulais dire par routes est que le fait de passer un paramètre supplémentaire ({customerNumber}) dans l’URL (/ Home / IsEmailValid / {companyId} / {customerNumber}) ne fonctionnera pas avec le mappage de route par défaut.
La solution
Vous pouvez utiliser le plug-in de validation jQuery pour le faire.
Vous allez devoir mettre en œuvre votre propre méthode, mais comme ceci:
$.validator.addMethod("checkCompanyEmail", function(value, element) {
var email = value;
var companyID = //get the companyID
var result;
//post the data to server side and process the result and return it
return result;
}, "That company email is already taken.");
Enregistrez ensuite votre méthode de validation:
$("#the-form").validate({
rules: { email: { required: true, "checkCompanyEmail" : true } }
});
PS. Je ne comprends pas pourquoi vous devez "bidouiller". avec routage pour cela.
Autres conseils
à partir de la documentation de validation sous la méthode distante
remote: {
url: "check-email.php",
type: "post",
data: {
username: function() {
return $("#username").val();
}
}
}