2010-12-09 2 views
0

Je ne comprends pas une seule fois le bouton cliquémvc3 Ajax soumission sur le côté du contrôleur. Comment?

Comment gérer l'appel ajax sur le côté serveur afin que mon travail de DataAnnotation et je reçois un message de réussite ou d'erreur. Si je me souviens bien

<script src="../../../../Content/Scripts/jquery-1.4.4-vsdoc.js" type="text/javascript"></script 
<script type="text/javascript"> 

    $(function() 
    { 
     $("#createButton").click(function() 
     { 
      var profile = { 
       FirstName: $("#FirstName").val(), 
       LastName: $("#LastName").val(), 
       Email: $("#Email").val() 
      }; 

       $.ajax({ 
        url: "/Profile/Create", 
        type: "Post", 
        data: JSON.stringyfy(profile), 
        dataType: "json", 
        contentType: "Application/json; charset=utf-8", 
        success: function() { 
         $("#message").html("Profile Saved."); 
        }, 
        error: function() { 
         $("#message").html("Error occured"); 
        } 
       }); 

      return false; 
     }); 
    }); 

</script> 

//Server side 
public ActionResult Create(string confirmButton, CreateViewModel userVm) 
{ 
    if (confirmButton != "Create Profile") return RedirectToAction("Index"); 

    if (!ModelState.IsValid) 
     return View("Create", userVm); 

    User user = new User(); 
    Mapper.Map(userVm, user); 

    _repository.Create(user); 

    return RedirectToAction("Details", new { id = user.UserId }); 
} 

Répondre

0

(il a été un moment que je jouais avec jquery), le succès et l'erreur sont une indication de la valeur de retour de la requête HTTP réel lui-même. Par exemple, si vous frappez un 404, vous obtiendrez un message d'erreur. Indépendamment de la création réussie d'un profil grâce à la logique de votre page, si la requête elle-même a été traitée, le message de réussite est envoyé. Vous devez interpréter la valeur de retour à ce stade.

+0

Je comprends. Mais comme dans le code du contrôleur ci-dessus ce que je retourne une fois la validation échouée. Au lieu de retourner View ("Create", userVm); que devrais-je retourner. C'est le problème auquel je suis confronté. – Pirzada

0

Essayez de renvoyer un JsorResult à la place de la redirection vers une vue, puis côté client, analysez le JsonResult et agissez en conséquence.

[HttpPost] 
public JsonResult DeleteDoc(int Id, int DocCode, SomeObject Model) 
{  
try 
{ 
    // Check annotations stuffs 
    if (!Model.IsValid) { 
    var jsonDataM = new { ExitCode= -100, message = "Invalid Model" }; 
    return Json(jsonDataM, JsonRequestBehavior.DenyGet); 
    } 
    // My logic in here 
    var jsonData = new { ExitCode= 0, message = "Everything's ok" }; 
    return Json(jsonData, JsonRequestBehavior.DenyGet); 
} 
catch (Exception e) 
{ 
    var jsonData2 = new { ExitCode= -1, message = "Everything's Ko" + e.Message }; 
    return Json(jsonDat2a, JsonRequestBehavior.DenyGet); 
} 
} 

dans le rappel OnSuccess vous pouvez vous référer à cela avec:

<script type="text/javascript"> 
function MyAjaxCallBack(context) { 
    var code = context.ExitCode; 
    if (code != 0) { 
    alert (context.message); 
    } 
} 
</script> 

S'il vous plaît noter que ce code est simplifié. Lors de la gestion de l'IsValid sur Model, je répète généralement del ModelState afin de construire un message.

Questions connexes