It's hard to give an example specific to what you may need. Therefore, I would suggest readiong the following article on cross-page posting. Simply put it enables you to access the PreviousPage, typically when using Server.Transfer().
http://msdn.microsoft.com/en-us/library/ms178139(VS.80).aspx
I actually threw something together, although this does require the PreviousPage to be available. It is simply for reference as it is untested. I have created a new Page you can derive from.
/// <summary>
/// A sequentially aware page.
/// </summary>
public class StrictAccessPage : Page
{
public event EventHandler<EventArgs> InvalidReferrer;
public event EventHandler<EventArgs> RevistAttempt;
private int _pageOrder = -1;
private bool _allowReturn = true;
/// <summary>
/// Gets the file name of the page
/// </summary>
public string FileName
{
get;
private set;
}
/// <summary>
/// Specifies the index of the page, this way the page. The initial page MUST start with 0;
/// </summary>
public int SequentialNumber
{
get
{
if (Session[FileName + "PageOrder"] != null)
_pageOrder = (int)(Session[FileName + "PageOrder"]);
return _pageOrder;
}
set
{
if (value < 0)
throw new ArgumentOutOfRangeException("PageOrder cannot be less than 0");
Session[FileName + "PageOrder"] = _pageOrder = value;
}
}
/// <summary>
/// Sets wether the current page should be allowed to be revisted per session.
/// </summary>
public bool AllowReturn
{
private get
{
if (Session["AllowReturn" + FileName] != null)
_allowReturn = (bool)Session["AllowReturn" + FileName];
return _allowReturn || !Page.IsPostBack;
}
set
{
Session["AllowReturn" + FileName] = _allowReturn = value;
}
}
protected override void OnInit(EventArgs e)
{
base.OnInit(e);
}
protected override void OnLoad(EventArgs e)
{
//Get the page's file name
FileInfo fInfo = new FileInfo(Request.Url.AbsolutePath);
this.FileName = fInfo.Name;
if (!AllowReturn)
{
OnRevistAttempt(this, e);
}
if (this.SequentialNumber > 0)
{
StrictAccessPage previousPage = PreviousPage as StrictAccessPage;
if (previousPage == null || this.SequentialNumber - previousPage.SequentialNumber != 1)
{
OnInvalidReferrer(this, e);
}
}
base.OnLoad(e);
}
public virtual void OnInvalidReferrer(object sender, EventArgs e)
{
if (InvalidReferrer != null)
InvalidReferrer(sender, e);
Response.Redirect(Page.Request.ServerVariables["HTTP_REFERRER"] ?? "~/Error.aspx");
}
public virtual void OnRevistAttempt(object sender, EventArgs e)
{
if (RevistAttempt != null)
RevistAttempt(sender, e);
Response.Redirect(Page.Request.ServerVariables["HTTP_REFERRER"] ?? "~/Error.aspx");
}
}
Sample usuage...
public partial class Default : StrictAccessPage
{
protected override void OnInit(EventArgs e)
{
this.SequentialNumber = 0;
this.AllowReturn = false;
base.OnInit(e);
}
}
http://www.suckmycode.netIf I answered your question please "Mark as Answer"