Question

Im en utilisant UpdatePanel pour certains contrôles spécialement pour captchas donc, lorsqu'une AsyncPostBack est effectuée déclenchée par un bouton « btnQuery » Comment puis-je savoir au .ashx (gestionnaire pour Captcha) pour rafraîchir l'auto?

Im en utilisant session pour valider l'image sur Captcha au Num sur l'entrée sous l'image

est le gestionnaire:

<%@ 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; } }
}

Je veux rafraîchir l'image .. ne pas faire ceci:

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

La solution

Essayez les options de mise en cache pour les gestionnaires tels que

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

Si ci-dessus ne fonctionne pas seulement idée que je me suis laissé appelle gestionnaire avec queryString de telle sorte que la source d'image est pas la même chaque fois que vous appelez
          Image1.ImageUrl = "Handler.aspx?guid=" + Guid.NewGuid();

Autres conseils

L'image est à l'intérieur du UpdatePanel? Je l'avais mis là si ce n'est pas. En outre, chaque fois que les mises à jour du panneau, assurez-vous que l'URL de l'image unique afin que les clients (navigateurs) ou mandataires ne seront pas utiliser une image en cache. Un Guid clouée en tant que paramètre querystring devrait faire l'affaire (par exemple YourImageHandler.ashx? Xxxxxxxxxxxx-xxxxxxxx-xxxxxxxxxxxx).

Angel,

L'image n'est pas demandé de nouveau à partir du serveur, donc il n'y a aucune possibilité pour le gestionnaire d'exécuter. Pour obtenir ce utiliser à nouveau, vous devez rendre le navigateur récupérer à nouveau l'image.

Cela dit, dans votre postback async, si rien de l'image est mise à jour, le navigateur aura aucune raison de chercher à nouveau indépendamment des paramètres du cache, etc.

Vous pouvez résoudre ce avec le script, mais un moyen plus facile est de suivre les conseils de Myra et ajouter un GUID à la chaîne de requête de l'image et changement GUID dans le cadre de votre async postback. Cela mettra à jour l'URL de l'image nécessaire sur le client et le forcer à revenir au serveur pour obtenir la nouvelle image.

Si cela ne résout pas le problème, s'il vous plaît poster la section de votre web.config qui associe les requêtes au gestionnaire d'image ainsi que le code que vous utilisez pour ajouter l'image à la page.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top