ImageURL在更新面板中不起作用

时间:2011-08-31 15:39:30

标签: c# asp.net ajax updatepanel captcha

我正在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();
        }
    }

4 个答案:

答案 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