小弟最近被迫使用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,重寫衝突解決了,第一個問題又發生了。 。 。經過推測,我覺得是瀏覽器快取的問題,我做了一個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