2013-04-08 4 views
0

Je pratique Ajax! J'ai un simple formulaire de contact et voici mes actions:json succès et échec de la réponse dans MVC

public ActionResult Contact() 
     { 
      return View("Contact"); 
     } 

     [HttpPost] 
     public ActionResult Contact(ContactViewModel contactViewModel) 
     { 
      if (ModelState.IsValid) 
      { 
       var contact = contactViewModel.ConvertToContactModel(); 
       _contactRepository.Add(contact); 
       _contactRepository.Save(); 
       return Json(new { msg = "Your contact Sent, I'll response soon." }); 
      } 
      return Json("Sorry! Somthing went wrong, try again or contact again"); 
     } 

et voici mon avis:

@model Blog.Web.UI.ViewModels.ContactViewModel 
@{ 
    ViewBag.Title = "Contact"; 
    Layout = "~/Views/Shared/_Layout.cshtml"; 
} 

<div id="Contact"> 
    @using (Ajax.BeginForm("Contact", "Home", new AjaxOptions() { OnSuccess = "Success" })) 
    { 

     <div> 
      @Html.LabelFor(c => c.Name) 
      @Html.TextBoxFor(c => c.Name) 
     </div> 

     <div> 
      @Html.LabelFor(c => c.Email) 
      @Html.TextBoxFor(c => c.Email) 
      @Html.ValidationMessageFor(c => c.Email) 
     </div> 

     <div> 
      @Html.LabelFor(c => c.Subject) 
      @Html.TextBoxFor(c => c.Subject) 
     </div> 

     <div> 
      @Html.LabelFor(c => c.Body) 
      @Html.TextAreaFor(c => c.Body) 
      @Html.ValidationMessageFor(c => c.Body) 
     </div> 
     <input type="submit" value="Send" /> 
    } 
</div> 

<script type="text/javascript"> 
    function Success(context) { 
     if (context[0]) { 
      $("#Contact").empty().html(context[1]); 
     } 
    } 
</script> 

Maintenant, je veux montrer le succès de l'utilisateur ou à défaut de contact établi, quel est le problème de mon code qui ne fonctionne pas ?? c'est tellement intéressant que ma validation ne marche pas dans ce cas! s'il vous plaît aidez-moi à ce sujet, merci

Répondre

0

Contrairement à Slicksim, nous avons généralement une classe de retour JSON définie dans notre modèles d'application contenant une variable booléenne Success. Nous pouvons ensuite utiliser ceci pour que le Javascript détermine si la requête a réussi ou non.

public class JsonResponseModel(){ 
    public bool Success {get;set;} 

    public string Message {get;set;} 
} 

public ActionResult Contact() 
     { 
      return View("Contact"); 
     } 

     [HttpPost] 
     public ActionResult Contact(ContactViewModel contactViewModel) 
     { 
      if (ModelState.IsValid) 
      { 
       var contact = contactViewModel.ConvertToContactModel(); 
       _contactRepository.Add(contact); 
       _contactRepository.Save(); 
       return Json(new JsonResponseModel{ Success = true, Messsage = "Your contact Sent, I'll response soon." }); 
      } 
      return Json(new JsonResponseModel{Success = false, Message = "Sorry! Somthing went wrong, try again or contact again"}); 
     } 

<script type="text/javascript"> 
    function Success(response) { 
     if (response.Success) { 
      $("#Contact").empty().html(response.Message); 
     } 
     else{ 
      alert(response.Message); 
     } 
    } 
</script> 

Je suppose que c'est la voie que nous sommes allés au lieu de modifier les en-têtes de serveur parce que vous pouvez faire quelque chose de différent si la validation a échoué sur un appel AJAX plutôt que d'une erreur de serveur réel (état HTTP CoDe 500/404/etc)

0

si vous voulez une réponse d'erreur afin d'être envoyé, alors vous devez définir le ResponseCode de l'objet de réponse à un code d'erreur http approprié, comme 400 pour une mauvaise demande.

Vous devrez alors fournir un gestionnaire d'erreur dans le fichier ajax.beginform pour afficher le contenu souhaité. Si vous ne le faites pas, il retournera un responsecode de 200 et traitera que tout est hunky dory, donc votre gestionnaire d'erreur ne sera pas déclenché

Questions connexes