2013-05-13 156 views
0

點擊LinkButton,我刷新圖像控件中的圖像而不刷新頁面。爲此,我使用了UpdatePanelAsyncPostBackTriggerUpdatePanel僅適用於Chrome,不適用於IE/Mozilla。爲什麼?

它在鍍鉻中工作完美。但不是在IE和Mozilla中。在IE和Mozilla上,當我點擊鏈接按鈕時,沒有任何反應。看起來很奇怪。對此有任何線索?

<asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Conditional"> 
    <ContentTemplate> 
     <asp:TextBox ID="txtCaptchaInput" BorderStyle="Solid" Style="vertical-align: top" runat="server" Width="106px" BorderWidth="1px"></asp:TextBox> 
     <asp:Image ID="img_captcha" runat="server" Height="32px" ImageUrl="~/captchaJPEG.aspx" Width="108px" /> 
     <asp:LinkButton ID="captcha_refresh" runat="server">Refresh Image</asp:LinkButton> 
    </ContentTemplate> 
    <Triggers> 
     <asp:AsyncPostBackTrigger ControlID="captcha_refresh" /> 
    </Triggers> 
</asp:UpdatePanel> 

CaptchaJPEG.aspx:頁面加載

Dim captcha As New Captcha.CaptchaImage() 
    captcha.width = 150 
    captcha.height = 40 
    captcha.text = Me.Session("CaptchaText").ToString() 
    captcha.GenerateImage() 
    captcha.image.Save(Me.Response.OutputStream, System.Drawing.Imaging.ImageFormat.Jpeg) 
+0

檢查你得到的JavaScript錯誤!此外鏈接按鈕不叫任何功能!也許這是問題? – Aristos 2013-05-13 13:36:25

+0

@Aristos Mozilla中沒有javascript錯誤。鏈接按鈕有一個點擊事件,點擊Mozilla和Chrome中的鏈接按鈕時會正確觸發。問題是,除mozilla之外的瀏覽器中圖像不會發生變化 – Anuya 2013-05-13 13:47:10

+0

然後,也許圖像停留在緩存上,需要製作一些技巧來強制更新。現在,我看到它更好,您使用一個頁面發送圖像。更好地使用處理程序。 – Aristos 2013-05-13 13:50:55

回答

0

您的問題與返回的圖像captchaJPEG.aspx的緩存做。作爲圖像瀏覽器可以保留它,而不是改變它。

爲了避免這種情況,有兩種方式,您可以設置一些緩存頭說瀏覽器不保持它的緩存爲:

Response.Cache.SetExpires(DateTime.Now.AddDays(-10)); 
Response.Cache.SetMaxAge(new TimeSpan(-10, 0, 0)); 

或者 - 即我認爲是更好 - 添加一個隨機

img_captcha.ImageUrl = "~/captchaJPEG.aspx?_rnd=" + RandomNumber; 

在這裏你可以讓事情更好,使用您的驗證碼代碼的hash(),如:

img_captcha.ImageUrl = "~/captchaJPEG.aspx?_rnd=" + CaptachHiddenNumbers.hash(); 
,你把它放在後面的代碼,如圖像標籤上的數字

就是這樣,如果從加載到加載的驗證碼是相同的,那麼它就保持在緩存上。

現在,「正確的方式」是使用一個處理程序而不是一個頁面的原因很多,就像你不希望頁面的所有開銷只是爲了發送一個圖像。現在the handler come with the minimum modules call,到add session you need to use the IRequiresSessionState

要回答這個問題,爲什麼在瀏覽器上的表現不同,是因爲在一些小細節中,瀏覽器具有不同的行爲,取決於他們如何以及檢查哪些內容以決定是否使用緩存的圖像,瀏覽器與緩存。

+0

將'AsyncPostBackTrigger'沒有'EventName'工作? – 2013-05-13 16:31:35

+0

@majidgeek我不知道 - 我需要做一個測試,看看它是否。對這個問題的評論是聲稱它是。 (請參閱OP上的第一條評論)並且因爲在一個瀏覽器上工作,那麼可能不是這就是問題,如果肯定的話就是緩存。 – Aristos 2013-05-13 16:33:23

+0

@Aristos我已經添加了緩存過期,正如你在頁面加載「captchajpeg.aspx」時提到的第一點,但即使這樣也行不通。我做錯了嗎? – Anuya 2013-05-14 09:15:07

相關問題