2013-05-13 159 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

相关问题