29 Ağustos 2014 Cuma

GenericHandler içerisinde UserControl Çağırırken OutputCache yüzünden oluşan PartialCachingControl Hatası

Başlık biraz uzun oldu arkadaşlar

Projemdeki resimleri Ashx içerisinde oluşturup disk üzerinde bellekte tutmam gerekiyordu
ashx içerisinde  Custom Cache Provider kullanmanın bir yolunu bulamadım bende ashx içerisinden usercontrolü load ettim ama Usercontrol içerisinde OutputCache uygulayınca PartialCachingControl hatası veriyordu çözümü aşağıdadır.


Code:
<%@ WebHandler Language="C#" Class="test" %>

using System;
using System.Globalization;
using System.IO; using System.Web; using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;

public class test : IHttpHandler
{
    protected static string LoadUserControl()
    {
        using (Page page = new Page())
        {
            HtmlForm f = new HtmlForm();
            UserControl uc = (UserControl)page.LoadControl("yol/control.ascx");
            using (StringWriter writer = new StringWriter(CultureInfo.CurrentCulture))
            {
                f.Controls.Add(uc);
                page.Controls.Add(f);
                HttpContext.Current.Server.Execute(page, writer, false);
                return writer.ToString();
            }
        }
    }
    protected static string LoadUserControl2()
    {
        using (Page page = new Page())
        {
            HtmlForm f = new HtmlForm();
            PartialCachingControl uc = (PartialCachingControl)page.LoadControl("yol/control.ascx");
            using (StringWriter writer = new StringWriter(CultureInfo.CurrentCulture))
            {
                f.Controls.Add(uc);
                page.Controls.Add(f);
                HttpContext.Current.Server.Execute(page, writer, false);
                return writer.ToString();
            }
        }
    }
    // 
    public void ProcessRequest(HttpContext context)
    {
        context.Response.ContentType = "text/html";
        try
        {
            context.Response.Write(LoadUserControl());
        }
        catch (Exception)
        {
            context.Response.Write(LoadUserControl2());
        }
       

    }

    public bool IsReusable
    {
        get
        {
            return false;
        }
    }

}

Hiç yorum yok:

Yorum Gönder