J'ai une action ASP.NET MVC simple comme ceci:
public ActionResult Edit(EditPostViewModel data)
{
}
Les EditPostViewModel
attributs de validation ont comme ceci:
[Display(Name = "...", Description = "...")]
[StringLength(100, MinimumLength = 3, ErrorMessage = "...")]
[Required()]
public string Title { get; set; }
Dans la vue, j'utilise les aides suivantes:
@Html.LabelFor(Model => Model.EditPostViewModel.Title, true)
@Html.TextBoxFor(Model => Model.EditPostViewModel.Title,
new { @class = "tb1", @Style = "width:400px;" })
Si je fais un envoi sur un formulaire que cette zone de texte est placée dans une validation se fera d'abord sur le client puis sur le service ( ModelState.IsValid
).
Maintenant, j'ai quelques questions:
Cela peut-il être utilisé avec jQuery ajax submit à la place? Ce que je fais, c'est simplement supprimer le formulaire et en cliquant sur le bouton Soumettre, un javascript recueillera des données, puis exécutera le fichier
$.ajax
.Le côté serveur
ModelState.IsValid
fonctionnera-t-il?Comment puis-je renvoyer le problème de validation au client et le présenter comme si j'utilisais le build int validation (
@Html.ValidationSummary(true)
)?
Exemple d'appel Ajax:
function SendPost(actionPath) {
$.ajax({
url: actionPath,
type: 'POST',
dataType: 'json',
data:
{
Text: $('#EditPostViewModel_Text').val(),
Title: $('#EditPostViewModel_Title').val()
},
success: function (data) {
alert('success');
},
error: function () {
alert('error');
}
});
}
Modifier 1:
Inclus sur la page:
<script src="/Scripts/jquery-1.7.1.min.js"></script>
<script src="/Scripts/jquery.validate.min.js"></script>
<script src="/Scripts/jquery.validate.unobtrusive.min.js"></script>
la source
Réponses:
Côté client
En utilisant le
jQuery.validate
bibliothèque devrait être assez simple à configurer.Spécifiez les paramètres suivants dans votre
Web.config
fichier:Lorsque vous construisez votre vue, vous définiriez des choses comme ceci:
REMARQUE: ceux- ci doivent être définis dans un élément de formulaire
Ensuite, vous devrez inclure les bibliothèques suivantes:
Cela devrait être en mesure de vous configurer pour la validation côté client
Ressources
Du côté serveur
REMARQUE: Ceci est uniquement pour une validation supplémentaire côté serveur en haut de la
jQuery.validation
bibliothèquePeut-être que quelque chose comme ça pourrait aider:
Où
ValidateAjax
est un attribut défini comme:Cela renvoie un objet JSON spécifiant toutes vos erreurs de modèle.
Un exemple de réponse serait
Cela serait renvoyé à votre rappel de gestion des erreurs de l'
$.ajax
appelVous pouvez parcourir les données renvoyées pour définir les messages d'erreur selon les besoins en fonction des clés renvoyées (je pense que quelque chose comme
$('input[name="' + err.key + '"]')
trouverait votre élément d'entréela source
for (var i = 0; i < modelStateErrors.length; i++) { $('span[data-valmsg-for="' + modelStateErrors[i].key + '"]').text(modelStateErrors[i].errors[0]); }
Ce que vous devez faire est de sérialiser vos données de formulaire et de les envoyer à l'action du contrôleur. ASP.NET MVC liera les données du formulaire à l'
EditPostViewModel
objet (votre paramètre de méthode d'action), à l'aide de la fonctionnalité de liaison de modèle MVC.Vous pouvez valider votre formulaire côté client et si tout va bien, envoyer les données au serveur. La
valid()
méthode vous sera utile.la source
Voici une solution assez simple:
Dans le contrôleur, nous renvoyons nos erreurs comme ceci:
Voici quelques-uns des scripts client:
C'est ainsi que nous le gérons via ajax:
De plus, je rend des vues partielles via ajax de la manière suivante:
Méthode RenderRazorViewToString:
la source
PartialView
pour rendre à Ajax?Ajout d'un peu plus de logique à la solution fournie par @Andrew Burgess. Voici la solution complète:
Création d'un filtre d'action pour obtenir des erreurs pour la requête ajax:
Ajout du filtre à ma méthode de contrôleur comme:
Ajout d'un script commun pour la validation jquery:
Enfin ajouté la méthode javascript d'erreur à mon formulaire Ajax Begin:
la source
Vous pouvez le faire de cette façon:
( Edit: considérant que vous attendez une réponse
json
avecdataType: 'json'
).NET
JS:
Si vous en avez besoin, je peux également expliquer comment le faire en renvoyant une erreur 500 et obtenir l'erreur dans l'erreur d'événement (ajax). Mais dans votre cas, cela peut être une option
la source