문제

aptudPanel을 사용하여 캡처를 위해 특별히 컨트롤을 사용하여 AsyncPostback을 "btnquery"버튼으로 트리거 할 때, .ASHX (핸들러)에게 자체를 새로 고치기 위해 어떻게 말할 수 있습니까?

IM 세션을 사용하여 CAPTCHA의 이미지를 이미지 아래 입력의 NUM으로 검증합니다.

이것은 핸들러입니다 :

<%@ 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);
    }
도움이 되었습니까?

해결책

다음과 같은 핸들러에 대한 캐싱 옵션을 사용해보십시오

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

위의 일이 작동하지 않는 경우 내가 남은 아이디어 만 쿼리 스트링을 사용하여 핸들러를 호출하여 이미지 소스가 동일하지 않습니다.
Image1.ImageUrl = "Handler.aspx?guid=" + Guid.NewGuid();

다른 팁

UpdatePanel 내부의 이미지입니까? 그렇지 않으면 거기에 넣을 것입니다. 또한 패널이 업데이트 될 때마다 클라이언트 (브라우저) 또는 프록시가 캐시 된 이미지를 사용하지 않도록 이미지의 URL이 고유한지 확인하십시오. QueryString 매개 변수로 연결된 안내는 트릭을 수행해야합니다 (예 : YourImageHandler.ASHX? XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX).

천사,

서버에서 이미지가 다시 요청되지 않으므로 핸들러가 실행할 기회가 없습니다. 이를 다시 실행하려면 브라우저가 이미지를 다시 검색해야합니다.

즉, Async Postback에서 이미지에 대해 업데이트되지 않으면 브라우저는 캐시 설정 등에 관계없이 다시 가져올 이유가 없습니다.

당신은 이것을 스크립트로 해결할 수 있지만, 더 쉬운 방법은 Myra의 조언을 받아 이미지의 쿼리 문자열에 대한지도를 추가하는 것입니다. 그 안내를 변경하십시오 Async Postback의 일부로. 이렇게하면 클라이언트에 필요한 이미지의 URL을 업데이트하고 새 이미지를 얻기 위해 서버로 돌아가도록 강요합니다.

문제가 해결되지 않으면 Web.config의 섹션을 이미지 핸들러에 맵핑하는 섹션과 페이지에 이미지를 추가하는 데 사용하는 코드를 게시하십시오.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top