.NET防止重新整理重複提交

來源:互聯網
上載者:User
代碼
公用類RefreshServe:System.Web.UI.Page
{
私人靜態ILog日誌= LogManager.GetLogger(typeof運算(RefreshServe)) ;

私人唯讀字串REFRESH_TICKET_NAME =“__RefreshTicketArray”;
私人唯讀字串HIDDEN_FIELD_NAME =“__RefreshHiddenField”;
私人唯讀字串HIDDEN_PAGE_GUID =“__RefreshPageGuid”;

/// <摘要>
///為真表示頁面重新整理,假為正常提交
/// </摘要>
公用BOOL IsPageRefreshed
{
獲得
{
如果(的IsPostBack &&!CheckRefreshFlag())
{
log.Debug(“重新整理了頁面“);
返回true;
}
其他
{
log.Debug(“正常提交”);
返回false;
}
}
}

/// <摘要>
///呈現前更新標識
/// </摘要>
/// <param name =“E”> </ param>的
保護覆蓋無效的OnPreRender(EventArgs的發送)
{
log.Debug (“執行的OnPreRender”);
base.OnPreRender(E);
UpdateRefreshFlag();
}


/// <摘要>
///更新標識,正常提交都刪除該次提交的時間,並生產當前新的時間
/// </摘要>
私人無效UpdateRefreshFlag()
{

#地區的Cookie模式

//註冊頁面唯一標識並返回
字串pageGuid = SetCurPageGuid();

的HttpCookie餅乾= GetRefreshTicket();

如果(cookie.Values.Count> 0)
{
cookie.Values.Remove(pageGuid);
log.Debug(“當前清除的cookie的變是:”+ pageGuid);
}

字串submitTime = DateTime.Now.ToString(“hhmmss.fffff”);
//當前提交時間儲存到隱藏欄位
ClientScript.RegisterHiddenField(HIDDEN_FIELD_NAME,submitTime);


log.Debug(“即將要新增的時間:submitTime:”+ submitTime +“的Guid:”+ pageGuid.ToString());
cookie.Values.Add(pageGuid,submitTime);

log.Debug(“UpdateRefreshFlag中當前的Cookie中存在的記錄數為:”+ cookie.Values.Count);
對(INT I = 0; I <cookie.Values.Count;我++)
log.Info(“餅乾[”+ cookie.Values.GetKey(I)+“]:”+ cookie.Values [I]);

Response.AppendCookie(餅乾);

#endregion

}


/// <摘要>
///驗證是否重新整理
/// </摘要>
/// <返回> </回報>
私人布爾CheckRefreshFlag()
{
的HttpCookie餅乾= GetRefreshTicket();
字串pageGuid = GetCurPageGuid();
如果(cookie.Values.Count> 0)
{
布爾標誌;
如果(cookie.Values [pageGuid]!= NULL)
標誌= cookie.Values [pageGuid] .IndexOf(GetCurSubmitTime())> -1;
其他
標誌= TRUE; //防止出現異常,總是可以提交
如果(標誌)
log.Debug(“提交時間存在,可以提交”);
其他
log.Debug(“無效的提交時間”);
返回標誌;
}
返回true;
}


/// <摘要>
///得到已儲存的提交時間,沒有建立,有返回
/// </摘要>
/// <返回> </回報>
私人的HttpCookie GetRefreshTicket()
{
#地區的Cookie模式,傳回值為曲奇

的HttpCookie cookie的;
如果(Request.Cookies時[REFRESH_TICKET_NAME] == NULL)
{
餅乾=新的HttpCookie(REFRESH_TICKET_NAME);
Response.AppendCookie(餅乾);
log.Debug(“曲奇不存在,初始化”);
}
否則
{
餅乾= Request.Cookies時[REFRESH_TICKET_NAME]

log.Debug(“讀取已存在的餅乾,曲奇當前中存在的記錄數為:”+ cookie.Values.Count +“具體有如下幾條:”);

對(INT I = 0; I <cookie.Values.Count;我++)
log.Info(“餅乾[”+ cookie.Values.GetKey(I)+“]:”+ cookie.Values [I]);
}
返回的cookie;
#endregion
}


/// <摘要>
///擷取當前提交時間
/// </摘要>
/// <返回> </回報>
私人字串GetCurSubmitTime()
{
字串submitTime = Request.Params [HIDDEN_FIELD_NAME] ==空值 ?“”:Request.Params [HIDDEN_FIELD_NAME]的ToString();
log.Debug(“執行GetCurSubmitTime:submitTime為:”+ submitTime);
返回submitTime;
}


/// <摘要>
///設定頁面唯一標識,通過的Guid標識來區分每個頁面自己的提交 時間
/// </摘要>
私人字串SetCurPageGuid()
{
字串GUID;
如果(的IsPostBack!)
{
如果(Request.Params [HIDDEN_PAGE_GUID] == NULL)
{
GUID = System.Guid.NewGuid()的ToString()。
log.Debug(“SetCurPageGuid註冊了一個新的標識:”+ GUID);
}
否則
GUID = GetCurPageGuid();

}
否則
{
GUID = GetCurPageGuid();
}

ClientScript.RegisterHiddenField(HIDDEN_PAGE_GUID,GUID)
返回GUID;
}



/// <摘要>
///得到當前頁面的唯一標識
/// </摘要>
/// <返回> </回報>
私人字串GetCurPageGuid()
{
字串pageGuid = Request.Params [HIDDEN_PAGE_GUID] ==空值 ?“無”:Request.Params [HIDDEN_PAGE_GUID]的ToString();
log.Debug(“執行GetCurPageGuid()後Page_GUID為:”+ pageGuid);
返回pageGuid;
}
}




999999999999999999999999999999999999999999999999
需要重新整理判斷功能時新頁面只需繼承該類就可,通過引用屬性IsPageRefreshed識別“為真表示重新整理,假則是正常提交”,將資料庫的操作寫在
如果(!IsPageRefreshed)
{
資料庫操作
}
  • 相關文章

    聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.