Frage

Im mit Update für einige Kontrollen speziell für Captchas so, wenn ein AsyncPostBack ausgeführt wird durch eine Taste „btnQuery“ ausgelöst: Wie kann ich auf die .ashx (Handler für Captcha) sagen, es selbst zu aktualisieren?

Im mit Sitzung das Bild auf Captcha die Num am Eingang unterhalb dem Bild bestätigen

Dies ist der Handler:

<%@ WebHandler Language="C#" Class="captcha" %>
using System;
using System.Web;
using System.Web.SessionState;
using System.Drawing;

public class captcha : IHttpHandler, IRequiresSessionState
{

    public void ProcessRequest(HttpContext context)
    {
        context.Response.ContentType = "image/GIF";

        Bitmap imagen_GIF = new System.Drawing.Bitmap(80, 30);
        Graphics grafico = System.Drawing.Graphics.FromImage(imagen_GIF);
        grafico.Clear(Color.Gainsboro);

        Font tipo_fuente = new Font("Comic Sans", 12, FontStyle.Bold);

        string randomNum = string.Empty;
        Random autoRand = new Random();

        for (int x = 0; x < 5; x++)
        {
            randomNum += System.Convert.ToInt32(autoRand.Next(0, 9)).ToString();
        }
        int i_letra = System.Convert.ToInt32(autoRand.Next(65, 90));

        string letra = ((char)i_letra).ToString();
        randomNum += letra;

        context.Session["RandomNumero"] = randomNum;

        grafico.DrawString(randomNum, tipo_fuente, Brushes.Black, 5, 5);

        imagen_GIF.Save(context.Response.OutputStream, System.Drawing.Imaging.ImageFormat.Gif);

        tipo_fuente.Dispose();
        grafico.Dispose();
        imagen_GIF.Dispose();
    }

    public bool IsReusable { get { return false; } }
}

Ich mag das Bild aktualisieren .. nicht nur dies zu tun:

   public void postbackear()
    {
        string script = string.Format("Sys.WebForms.PageRequestManager.getInstance()._doPostBack('{0}', '');",
                            btnConsulta.ID);
        ScriptManager.RegisterStartupScript(this.Page, typeof(string), "Refresh", script, true);
    }
War es hilfreich?

Lösung

Versuchen Sie Caching-Optionen für Handler wie

context.Response.Cache.SetExpires(DateTime.Now); context.Response.Cache.SetCacheability(HttpCacheability.Public); context.Response.Cache.SetValidUntilExpires(false);

Wenn oben funktioniert nicht nur Idee, die ich verlassen habe ruft Handler mit querystring so dass die Bildquelle nicht gleich ist jederzeit rufen Sie
          Image1.ImageUrl = "Handler.aspx?guid=" + Guid.NewGuid();

Andere Tipps

Ist das Bild im Innern des Update? Ich würde es dort setzen, wenn dies nicht der Fall. Auch kann jedes Mal, wenn das Panel-Updates, stellen Sie sicher, dass Sie die URL für das Bild einzigartig, so dass Clients (Browser) oder Proxies wird nicht im Cache gespeicherten Bild verwenden. Ein Guid geheftet als Abfragezeichenfolgeflag Parameter sollte es tun (zum Beispiel YourImageHandler.ashx? Xxxxxxxxxxxx-xxxxxxxx-xxxxxxxxxxxx).

Angel,

Das Bild wird nicht erneut vom Server angefordert werden, so dass es keine Möglichkeit für die Prozedur auszuführen. Um das zu wieder ausführen, müssen Sie den Browser erneut das Bild machen abzurufen.

Wie gesagt, in Ihrem async Postbacks, wenn nichts über das Bild aktualisiert wird, wird der Browser keinen Grund, es zu holen wieder unabhängig von Cache-Einstellungen, etc.

Sie können dieses Problem lösen mit Skript, aber ein einfacher Weg ist Myras Beratung und fügen Sie eine GUID an den Query-String des Bildes und ändern, dass GUID als Teil Ihrer async Postbacks zu nehmen. Dies wird auf dem Client benötigt URL des Bildes aktualisieren und sie zwingt, an den Server zurück zu gehen um das neue Bild zu erhalten.

Wenn dies das Problem nicht lösen, bitte den Abschnitt Ihrer web.config veröffentlichen, die Anforderungen an die Bildbearbeitungsfunktion sowie der Code, den Sie das Bild auf die Webseite hinzuzufügen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top