单击LinkButton
时,我在图像控件中刷新图像而不刷新页面。为此,我使用了UpdatePanel
和AsyncPostBackTrigger
。
它在chrome中完美运行。但不是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 :(得分: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
。
回答这个问题,为什么在浏览器上表现不同,是因为在某些小细节浏览器中有不同的行为,取决于他们检查的方式和内容,以决定使用缓存的图像以及浏览器的攻击性如何用缓存。