程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> .NET實例教程 >> ASP.NET AJAX RC1(疑似缺陷)及URL重寫及浏覽器緩存三個湊到一

ASP.NET AJAX RC1(疑似缺陷)及URL重寫及浏覽器緩存三個湊到一

編輯:.NET實例教程
     小弟最近被迫使用Ajax,於是使用了asp.net ajax來實現,恩,那個簡單呀,三下兩下就搞定了...但問題也立馬就出來了,和我的url重寫沖突了,我的url重寫模塊是我自己寫的,做了一個過濾器早就把服務器form的提交位置有錯的問題解決過,但是現在只要是第2次使用ajax做回發,就會報告404錯誤,來cnblogs看到有人說到此問題,居然說通過修改action的方式可以解決,很納悶,action那我早就解決過,而且看起來也是最好的解決辦法...於是開了個鉤子程序,抓了IE每次的最終post地址,發現在ajax第2次回發之後,就會將他的提交地(不是頁面的action而是aspnet ajax內部用JS生成的一個叫form._initialAction的東西)址改為相對路徑,當然會有問題了,所以請發現url重寫與AJax沖突的兄弟,注意測試好這個問題,不要讓東西上了線才發現問題...更不要認為修改了action就萬事大吉了...這個問題,其實我更認為是“ASP.Net AJax RC1”的缺陷,為什麼要用相對路徑呢?老實點直接把action拿過來,不要搞那麼多奇怪的處理不是更好嗎?當然了,我並不了解他的設計原理,估計也是有他自己的理由吧,解決這個問題的相關代碼如下:
  
   <!--AJax腳本管理器-->
   <asp:ScriptManager ID="ScriptManager1" runat="server"></ASP:ScriptManager>
   <script type="text/Javascript">
   Sys.Application.add_load(function()
   {
   var form = Sys.WebForms.PageRequestManager.getInstance()._form;
   var href = window.location.href;
   if(href.indexOf("?") > 0)
   {
   href += "&a=" + Math.random();
   }
   else
   {
   href += "?a=" + Math.random();
   }
  
   form._initialAction = href;
   form.action = href;
   });
   </script>
  大家可能注意到了,這段代碼給地址加了個隨機數,其實是為了解決後面個問題(浏覽器緩存沖突)的,不過並沒有解決好。。。
  
  OK,重寫沖突解決了,第2個問題又發生了。。。經過推測,我覺得是浏覽器緩存的問題,我做了一個tags的添加刪除的功能,添加就不用多說了,刪除就是在Repeater中放了個ImageButton,通過他的click事件,使用CommandName把當前tag傳回去並刪除掉,這時候問題出現了,當我添加多個tag後,點其中一個刪除,updatepanel中的tags列表返回了添加第1個之前的狀態,於是我很懷疑是浏覽器緩存的問題,我又很傻的在server代碼中加入了 Response.Cache.SetNoStore();
   Response.Cache.SetLastModifIEd(DateTime.Now);希望可以解決問題,但事實上根本沒用,呵呵,於是我又通過上面那段JS代碼,在賦予form._initialAction的時候給url的最後加了一個隨機數,結果還是無效。。。猜想問題估計是出現在這個隨機數並沒有每次得到效果,但我又真是沒時間去深入的理解ASP.Net AJax的原理,所以希望知道此問題如何解決的哥們先幫兄弟解決一下,小地回頭再去研究。
  http://www.cnblogs.com/cnlamar/archive/2007/01/08/614671.Html 
  
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved