2009-08-05 3 views
1

Я использую UpdatePanel для некоторых элементов управления специально для captchas, поэтому, когда выполняется AsyncPostBack, запускается кнопкой «btnQuery», как я могу сообщить в .ashx (Обработчик для Captcha) для обновления сам?Использование ASP.NET AJAX UpdatePanel с обработчиками

Im помощью сессии для проверки образа на Captcha к Num на входе ниже изображения

это 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; } } 
} 

Я хочу, чтобы обновить изображение .. не только делает это :

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

Я хочу обновить изображение (обработчик, когда пользователь выполняет submit и ajaxupdatepanel, получает этот запрос и обновляет некоторые элементы управления на странице –

ответ

2

параметры кэширования Try для обработчиков, таких как

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

Если выше не работает только идея, которую я получил оставил зовет обработчика с QueryString так, что исходное изображение не совпадает в любое время вы звоните
Image1.ImageUrl = "Handler.aspx?guid=" + Guid.NewGuid();

1

Является ли изображение внутри UpdatePanel? Я бы положил его туда, если это не так. Кроме того, каждый раз, когда панель обновляется, убедитесь, что URL-адрес изображения уникален, чтобы клиенты (браузеры) или прокси не использовали кешированное изображение. Указанный в качестве параметра querystring указатель должен делать трюк (например, YourImageHandler.ashx? Xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx).

+0

изображение уже находится на обновленной панели, кстати ... изображение обновляется только тогда, когда происходит обратная передача , но когда веб-форма является поддержкой ajax, postback не возникает, как простая веб-форма после отправки какой-либо формы –

1

Angel,

Изображение не запрашивается повторно с сервера, так что нет возможности для га ndler для выполнения. Чтобы заставить это выполнить снова, вы должны заставить браузер снова получить изображение.

Это говорит, в вашем асинхронном постбэка, если ничего об изображении не обновляется, браузер не будет иметь никаких оснований, чтобы взять его снова, независимо от настроек кэша и т.д.

Вы могли бы решить эту проблему с помощью сценария, но проще всего принять совет Myra и добавить GUID к строке запроса изображения, а изменить этот GUID как часть вашей обратной обратной связи async. Это обновит URL-адрес изображения, необходимого на клиенте, и заставит его вернуться на сервер, чтобы получить новое изображение.

Если это не решит проблему, отправьте раздел вашего web.config, который отображает запросы обработчику изображения, а также код, который вы используете для добавления изображения на страницу.