2017-03-20 2 views
0

Je suis en train de charger le contenu d'une vue partielle en utilisant ajax et de sortir le HTML retourné directement à la page en remplissant le html d'un div. Voici l'ajax:Formulaire chargé en utilisant une vue partielle, afficher la réponse

$.ajax({ 
        data: { productId: productId }, 
        datatype: "text/plain", 
        type: "GET", 
        url: theUrl, 
        cache: false, 
        success: function (data) { 
         $("#contentArea").html(data); 
        } 
       }); 

Tout cela fonctionne comme prévu. En fonction d'un certain nombre de facteurs, le html réel dans la vue partielle varie, et l'un des scénarios possibles renvoie un formulaire qui demande un retour d'information.

J'ai la validation côté client qui fonctionne sur ce formulaire mais la validation côté serveur ne fonctionne pas.

Ma validation est FluentValidation et dans mon contrôleur je ces deux lignes (MyValidator est mon FluentValidation validateur et fonctionne correctement):

var valResult = myValidator.Validate(myRequest); 
if (!valResult.IsValid) return Redirect(Request.UrlReferrer); 

Cette demi-travaux, la vérification IsValid échoue à chaque fois que les données sont invalides mais alors ma redirection recharge simplement la page sans que les messages de validation côté serveur soient en place. Probablement parce que j'utilise une redirection.

Comment puis-je l'obtenir pour recharger la page mais avec les messages de validation en place étant donné que je charge dynamiquement ce formulaire en utilisant ajax?

Répondre

0

Vous devez écrire les erreurs de validation dans votre ViewModel et les renvoyer à la vue elle-même. Je le fais comme ceci:

var mailValidator = new Models.Dokumentacija.Validation.DokumentacijaMailValidation(); 
var mailValidatorResult = mailValidator.Validate(vm.MailPodatki); 
if (!mailValidatorResult.IsValid) 
{ 
    ModelState.Clear(); 
    foreach (var error in mailValidatorResult.Errors) ModelState.AddModelError(string.Format("MailPodatki.{0}", error.PropertyName), error.ErrorMessage); 
    return View(vm); 
} 

Vous devriez alors retourner votre ViewModel (maintenant avec des messages d'erreur) donc je pense que votre Redirect ne fonctionnera pas. Pouvez-vous faire un return PartialView("_myPartial", vm);?

+0

J'ai été en mesure de travailler avec les erreurs de validation et de changer la façon dont je leur ai montré donc je marque cela comme la réponse. Merci. –