2009-08-05 9 views
1

Im utilisant UpdatePanel pour certains contrôles spécialement pour les captchas, donc, quand un AsyncPostBack est effectué déclenché par un bouton "btnQuery", Comment puis-je dire au .ashx (Handler pour Captcha) de rafraîchir soi-même?Utiliser ASP.NET AJAX UpdatePanel avec des gestionnaires

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

c'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 .. et pas seulement comme cela :

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

Je souhaite actualiser l'image (gestionnaire lorsque l'utilisateur effectue une soumission et ajaxupdatepanel reçoit cette requête et rafraîchit certains contrôles sur la page –

Répondre

2

options de mise en cache Essayez de 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 suis parti 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();

1

L'image se trouve-t-elle dans le UpdatePanel? Je le mettrais si ce n'est pas le cas. De plus, à chaque mise à jour du panneau, assurez-vous que l'URL de l'image est unique afin que les clients (navigateurs) ou les mandataires n'utilisent pas une image mise en cache. Un Guid mis sur comme paramètre de chaîne de requête devrait faire l'affaire (par exemple YourImageHandler.ashx? Xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx).

+0

l'image est déjà sur le panneau de mise à jour, en passant .. l'image ne s'actualise qu'à la publication , mais lorsque le formulaire Web est ajax activé, la publication ne se produit pas comme un simple formulaire Web après avoir soumis une forme –

1

Angel,

L'image n'est pas demandée à nouveau par le serveur, donc il n'y a pas d'opportunité ndler à exécuter. Pour que cela soit à nouveau exécuté, vous devez faire en sorte que le navigateur récupère à 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 le moyen le plus simple est de prendre les conseils de Myra et d'ajouter un GUID à la chaîne de requête de l'image et changer ce GUID dans le cadre de votre publication asynchrone. Cela va mettre à jour l'URL de l'image nécessaire sur le client et le forcer à retourner au serveur pour obtenir la nouvelle image. Si cela ne résout pas le problème, veuillez publier la section de votre fichier web.config qui mappe les demandes au gestionnaire d'image ainsi que le code que vous utilisez pour ajouter l'image à la page.