小弟最近被迫使用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