Удаление объекта после (возможно, перенаправленного) запроса - PullRequest
1 голос
/ 20 июля 2010

У меня есть CustomRequestContext объект, который должен быть удален после каждого запроса.Я создаю его в Page_Load и распоряжаюсь им в Page_Unload.Единственная проблема заключается в том, что при определенных обстоятельствах мне нужно позвонить Server.Transfer, чтобы вместо этого перенаправить на другую страницу aspx.В этом случае объект не должен выгружаться до тех пор, пока новая страница не будет готова к выгрузке.Каков наилучший способ достижения этого?

Ответы [ 2 ]

0 голосов
/ 27 июля 2010

Я решил эту проблему, позволив объекту принадлежать одной странице за раз. Если бы я хотел отказаться от контроля со страницы, я бы установил его равным нулю, и тогда он не был бы выпущен в деструкторе страницы.

0 голосов
/ 20 июля 2010

создайте собственный класс PageBase для всех ваших страниц asp.net, как упомянуто ниже, и утилизируйте CustomRequestContext для событий Page_Load и Page_Unload.

/// <summary>
/// Base of front end web pages.
/// </summary>
public class PageBase : System.Web.UI.Page
{

    /// <summary>
    /// Initializes a new instance of the Page class.
    /// </summary>
    public Page()
    {
        this.Load += new EventHandler(this.Page_Load);
        this.UnLoad += new EventHandler(this.Page_UnLoad);
    }

    /// <summary>
    /// Page Load
    /// </summary>
    /// <param name="sender">sender as object</param>
    /// <param name="e">Event arguments</param>
    private void Page_Load(object sender, EventArgs e)
    {
        try
        {
            //Dispose the object here, assuming it is IDisposable.
            //You can apply your own Disposition steps here..
            CustomRequestContext.Dispose();
        }
        catch
        {
            //handle the situation gracefully here.
        }
    }

    /// <summary>
    /// Page UnLoad
    /// </summary>
    /// <param name="sender">sender as object</param>
    /// <param name="e">Event arguments</param>
    private void Page_UnLoad(object sender, EventArgs e)
    {
        try
        {
            //Dispose the object here, assuming it is IDisposable.
            //You can apply your own Disposition steps here..
            CustomRequestContext.Dispose();
        }
        catch
        {
            //handle the situation gracefully here.
        }
    }
}
...