2009-03-26 20 views
0

Je n'arrive pas à comprendre pourquoi cette requête Ajax ne se déclenche pas correctement. Par souci de simplicité, j'ai essayé d'implémenter la requête Ajax en utilisant this tutorial. Cependant, je n'arrive pas à faire en sorte que mon contrôleur reconnaisse la demande comme telle. J'ai essayé de placer le Ajax.ActionLink dans le div pour être mis à jour (en dehors d'ici). En utilisant Response.Write pour placer le Datetime, celui de la Div est mis à jour, tandis que celui en dehors de la div cible ne l'est pas (comme prévu). Je ne connais pas très bien le fonctionnement de la bibliothèque MS Ajax, mais en surface, il semble que la partie droite de la page soit mise à jour, mais mon contrôleur ne reconnaît pas le type de requête et génère donc des informations incorrectes.asp.net Demande Ajax MVC ne se déclenche pas correctement

... 
    <script src="../../Scripts/MicrosoftAjax.js" type="text/javascript"></script> 
    <script src="../../Scripts/MicrosoftMvcAjax.js" type="text/javascript"></script> 
    <script src="../../Scripts/jquery-1.2.6.min.js" type="text/javascript"></script> 

</asp:Content> 
<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server"> 
    <div class="chart" id="divChart"> 
     <% Html.RenderPartial("GraphView", Model); %> 
     <br /> 
     <% Response.Write(DateTime.Now); %> 
     <br /> 
    </div> 
    <%= Ajax.ActionLink("no parameters", "MyWorkouts", new AjaxOptions{ UpdateTargetId = "divChart"}) %> 
    <%= Ajax.ActionLink("id parameter", "MyWorkouts", new {chtype=1},new AjaxOptions { UpdateTargetId = "divChart", OnBegin = "beginContactList", OnSuccess = "successContactList", OnFailure = "failureContactList" })%> 
    <%= Ajax.ActionLink("all parameters", "MyWorkouts", new {chtype=2, range=ViewData["daterangevalue"]},new AjaxOptions { UpdateTargetId = "divChart", OnBegin = "beginContactList", OnSuccess = "successContactList", OnFailure = "failureContactList" })%> 
    <br /> 
    <% Response.Write(DateTime.Now); %> 
    <h2> 
... 

Et puis mon ActionResult ressemble donc ...

[AcceptVerbs(HttpVerbs.Get)] 
     public ActionResult MyWorkouts(int? chtype, int? range) { 
      int dateRange = 3; 

      // do some stuff here - left out for readability 

      if (Request.IsAjaxRequest()) { 
       if (range != null) { 
        dateRange = (int)range; 
       } 

      } 

      //do some other stuff... 

      if (Request.IsAjaxRequest()) { 
       return PartialView("GraphView", workouts); 
      } else { 
       return View(workouts); 
      } 
     } 

(Tout est à peu près par défaut, car cela est juste une page de test pour mettre en œuvre une fois que je l'ai figuré dehors). En conséquence, je continue à obtenir la vue complète à l'intérieur de la div ciblée.

Répondre

0

Il semble que vous utilisiez une ancienne version du framework MVC?

Si c'est le cas, je recommande de mettre à jour la version et de vous assurer que vous utilisez les scripts jquery et mvc les plus récents ... Il y a eu des changements spécifiques à la méthode Request.IsAjaxRequest() .

En outre, si un appel RedirectToAction est impliqué, vous pouvez lire un similar problem here.

+0

Je crois que j'ai RC1 installé sur ma machine de développement (je sais que je n'ai pas mis à jour à RC2). De plus, il n'y a pas de comportement RedirectToActions ou de type de redirection se produisant dans le code omis, juste quelques appels de couche service. – MunkiPhD

0

Je ne sais pas quel est le problème, mais Fiddler et le RouteDebugger pourraient aider à le déboguer.

+0

Je ne crois pas que ce soit un problème de routage car il va au contrôleur correct - il ne reconnaît tout simplement pas la demande comme étant une requête Ajax. Je vais devoir essayer Fiddler, mais j'ai utilisé Firebug et je n'ai rien trouvé. – MunkiPhD

0

Il n'apparaît pas dans l'extrait que vous avez posté, mais vous avez probablement des tags de formulaire/formulaire. Ceux-ci interfèrent avec le Ajax.BeginForm qui génère également les balises de formulaire. Une fois que vous avez supprimé les balises de formulaire externes, Request.IsAjaxRequest renvoie true.

Questions connexes