Mon frère a récemment été obligé d'utiliser Ajax, alors il a utilisé asp.net ajax pour l'implémenter. Eh bien, c'était simple, et cela s'est fait en quelques clics... Mais le problème est apparu immédiatement et il était en conflit avec mon URL. réécriture. Mon module de réécriture d'URL a été écrit par moi-même. J'ai créé un filtre et résolu le problème de l'emplacement de soumission incorrect du formulaire du serveur. Mais maintenant, tant que j'utilise ajax pour la publication pour la deuxième fois, une erreur 404 sera signalée. . , je suis venu sur cnblogs et j'ai vu quelqu'un parler de ce problème, et j'ai en fait dit qu'il pouvait être résolu en modifiant l'action. J'étais très confus, j'ai résolu le problème d'action il y a longtemps et cela semblait être le meilleur. solution... J'ai donc ouvert un programme hook. , j'ai capturé l'adresse de publication finale de chaque IE et j'ai découvert qu'après la deuxième publication d'ajax, son adresse de soumission (pas l'action de la page, mais quelque chose appelé form._initialAction généré par js à l'intérieur d'aspnet ajax) sera bien sûr, il y aura des problèmes si vous le changez en chemin relatif, donc si vous trouvez que la réécriture d'URL est en conflit avec ajax, veuillez faire attention à tester ce problème et ne laissez pas les choses aller en ligne avant de découvrir le problème... Ne pensez pas que tout ira bien si vous modifiez l'action. ...En fait, je pense que ce problème est un défaut de "ASP.NET AJAX RC1". Pourquoi utiliser des chemins relatifs ? Ne vaudrait-il pas mieux être honnête et simplement agir au lieu de faire tant de choses étranges ? Bien sûr, je ne comprends pas ses principes de conception. Je suppose qu'il a ses propres raisons. Le code pertinent pour résoudre ce problème est le suivant :
<!--Ajax Script Manager-->.
<asp:ScriptManager ID="ScriptManager1" runat="server"></asp:ScriptManager>
<script type="text/javascript">
Sys.Application.add_load(fonction()
{
var form = Sys.WebForms.PageRequestManager.getInstance()._form;
var href = fenêtre.emplacement.href;
si(href.indexOf("?") > 0)
{
href += "&a=" + Math.random();
}
autre
{
href += "?a=" + Math.random();
}
form._initialAction = href;
form.action = href;
});
</script>
Vous avez peut-être remarqué que ce code ajoute un nombre aléatoire à l'adresse. Il s'agit en fait de résoudre ce dernier problème (conflit de cache du navigateur), mais il n'est pas bien résolu. . .
OK, le conflit de réécriture a été résolu et le deuxième problème s'est reproduit. . . Après spéculation, je pense que c'est un problème de cache du navigateur. J'ai créé une fonction pour ajouter et supprimer des balises. Inutile de dire que l'ajout consiste à mettre un ImageButton dans le répéteur, via son événement de clic, à utiliser CommandName pour ajouter la balise actuelle. renvoyé et supprimé à ce moment-là, le problème est survenu. Après avoir ajouté plusieurs balises et cliqué sur l'une d'elles pour la supprimer, la liste des balises dans le panneau de mise à jour est revenue à l'état avant d'ajouter la première, j'ai donc soupçonné qu'elle était mise en cache par. le navigateur. Problème, j'ai bêtement ajouté Response.Cache.SetNoStore();
Response.Cache.SetLastModified(DateTime.Now); J'espère que cela pourra résoudre le problème, mais en fait c'est inutile, haha, j'ai donc utilisé le code js ci-dessus pour ajouter un nombre aléatoire à la fin de l'URL lors de l'attribution du formulaire. _initialAction numéro, le résultat est toujours invalide. . . Je suppose que le problème se produit lorsque ce nombre aléatoire n'obtient pas l'effet à chaque fois, mais je n'ai vraiment pas le temps de comprendre en profondeur les principes d'asp.net ajax, j'espère donc que les amis qui savent comment résoudre ce problème pourront aide-moi d'abord à le résoudre, Xiaodi Retourne et étudie-le à nouveau.
http://www.cnblogs.com/cnlamar/archive/2007/01/08/614671.html