簡體   English   中英

ImageURL在更新面板中不起作用

[英]ImageURL doesn't work inside Update Panel

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

我猜你的〜/ 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
    }
}

我完全同意@Aren的上述評論。 我已經使用了更新面板4年了,看到它有時會做所有奇怪的事情。 使用Jquery ajax而不是您可以透明地看到發生了什么,並且IMO的速度也更快。

這聽起來像一個緩存問題。 確保最終圖像具有url的隨機值。 這樣,它將不會使用圖像的緩存版本。 使用Firebug在“ Net”面板中查看GET請求,並查看其是否正在下載最新映像。

不知道這行是什么意思。 執行后將imageurl設置為什么。

ImageCaptcha.ImageUrl = "~/BringImg.aspx";

嘗試將更新面板更新模式設置為“有條件”,並在綁定驗證碼后更新更新面板。

UpdatePanel1.Update();

希望這可能有用。

有什么理由不使用Recaptcha嗎? 我保證它是一個更好的解決方案,它是免費的。 http://www.google.com/recaptcha/whyrecaptcha

上面的代碼在會話中使用兩個不同的值-這是故意的還是問題的根源?:

驗證碼和CaptchaImageTest

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM