using System;
using System.Data;
using System.Configuration;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
/// <summary>
///BasePage 的摘要说明
/// </summary>
public class BasePage : System.Web.UI.Page
{
private static string PAGE_REFRESH_TICKET_KEY = "__PageRefreshTicketKey";
private string PAGE_SESSION_REFRESH_TICKET_KEY = "__PageSessionRefreshTicketKey";
/// <summary>
/// 判断是否是PostBack
/// </summary>
/// <returns></returns>
protected override System.Collections.Specialized.NameValueCollection DeterminePostBackMode()
{
//如果是通过"刷新"提交的后台,将页面强行设置成非PostBack模式,以实现刷新以重新的访问页面的形式进行
if (IsRefreshed)
{
return null;
}
return base.DeterminePostBackMode();
}
protected override void OnPreRenderComplete(EventArgs e)
{
SynchroRefreshTicket();
base.OnPreRenderComplete(e);
}
/// <summary>
/// 同步页面和后台Session的票据
/// </summary>
private void SynchroRefreshTicket()
{
if (!Page.IsPostBack)
{
string strTicket = Guid.NewGuid().ToString();
ClientScript.RegisterHiddenField(PAGE_REFRESH_TICKET_KEY, strTicket);
ClientScript.RegisterHiddenField(PAGE_SESSION_REFRESH_TICKET_KEY, strTicket);
Session[strTicket] = strTicket;
}
else
{
string strTicket = Guid.NewGuid().ToString();
ClientScript.RegisterHiddenField(PAGE_REFRESH_TICKET_KEY, strTicket);
ClientScript.RegisterHiddenField(PAGE_SESSION_REFRESH_TICKET_KEY, Request.Form[PAGE_SESSION_REFRESH_TICKET_KEY]);
Session[Request.Form[PAGE_SESSION_REFRESH_TICKET_KEY]] = strTicket;
}
}
/// <summary>
/// 比较HiddenField的票据和Session中存储的票据是否相同,如果不相同则为通过刷新的方式进行的提交
/// </summary>
protected bool IsRefreshed
{
get
{
if (string.Equals(Request.Form.Get(PAGE_REFRESH_TICKET_KEY), Session[Request.Form.Get(PAGE_SESSION_REFRESH_TICKET_KEY)]))
{
return false;
}
else
{
return true;
}
}
}
}