我正在ASP.NET C#中编写验证码验证程序。我面临的问题是在回发期间输入错误值时图像会刷新;但是当我将它们放在更新面板中时,同一图像在部分回发期间不会刷新。
aspx来源
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
<ContentTemplate>
<asp:Image ID="ImageCaptcha" runat="server" ImageUrl="~/BringImg.aspx" /><br />
<asp:TextBox ID="txtCaptcha" runat="server" ></asp:TextBox><br />
<asp:Button ID="btnSubmit" runat="server" Text="Submit Project" OnClick="btnSubmit_Click"/>
</ContentTemplate>
</asp:UpdatePanel>
代码背后:
private System.Random rand = new System.Random();
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
this.Session["Captcha"] = GenerateRandomCode();
}
}
protected void btnSubmit_Click(object sender, EventArgs e)
{
string temp = this.Session["Captcha"].ToString();
if (string.Compare(temp, this.txtCaptcha.Text.Trim()) == 0)
{
// success logic
}
else
{
this.lblResult.Text = "Validation Text was not correct.";
this.Session["Captcha"] = GenerateRandomCode();
ImageCaptcha.ImageUrl = "~/BringImg.aspx";
ImageCaptcha.DataBind();
}
}
答案 0 :(得分:1)
我猜你的〜/ BringImg.aspx页面正在将其内容类型设置为图像,并根据该会话值生成验证码图像。部分回发期间图像可能没有更新,因为浏览器没有意识到图像内容已经改变。有几种方法可以让浏览器知道图像已经改变,但最容易测试的方法之一是将无意义的查询字符串(每个图像不同)应用于验证码的ImageUrl。
protected void btnSubmit_Click(object sender, EventArgs e)
{
string temp = this.Session["Captcha"].ToString();
if (string.Compare(temp, this.txtCaptcha.Text.Trim()) == 0)
{
// success logic
}
else
{
this.lblResult.Text = "Validation Text was not correct.";
this.Session["Captcha"] = GenerateRandomCode();
ImageCaptcha.ImageUrl = string.Format("~/BringImg.aspx?refresh={0}", Guid.NewGuid());
ImageCaptcha.DataBind(); //This isn't necessary
}
}
答案 1 :(得分:0)
我完全同意@Aren上面的评论。我已经与更新面板合作了4年,并且看到它有时候会做所有我喜欢的事情。使用Jquery ajax,你可以透明地看到发生了什么,IMO也真的更快。
这听起来像是一个缓存问题。确保结束图像具有随机值到url。这样它就不会使用缓存版本的图像。使用firebug在Net面板中查看GET请求,看看它是否正在下载最新图像。
不确定这条线是什么意思。执行后将图像设置为什么。
ImageCaptcha.ImageUrl = "~/BringImg.aspx";
答案 2 :(得分:0)
尝试将更新面板更新模式设置为“有条件” 绑定验证码后更新更新面板。
UpdatePanel1.Update();
希望这可行。
答案 3 :(得分:0)
有什么理由不使用recaptcha? 我保证它有更好的解决方案,而且免费。 http://www.google.com/recaptcha/whyrecaptcha
上面的代码在会话中使用了两个不同的值 - 这是故意还是您的问题的来源?:
Captcha和CaptchaImageTest