.NET防止刷新重複提交
程式碼
公用類別RefreshServe:System.Web.UI.Page
{
私有靜態中ILog FRESH_TICKET_NAME =「__RefreshTicketArray」;
私人隻讀取字串HIDDEN_FIELD_NAME =「__RefreshHiddenField」;
私人唯讀字串HIDDEN_PAGE_GUID =「__RefreshPageGuid」; 為真表示頁面刷新,假為正常提交
/// 摘要>
公共BOOL IsPageRefreshed
{
獲得
{
如果(的IsPostBack &&!CheckRefreshFlag())
{
log.Debug(“刷新了頁面“);
返回true;
}
其他
{
log.Debug (「正常提交」);
返回false;
}
}
///
/ param>的
保護覆蓋無效的OnPreRender(EventArgs的送)
{ base.OnPreRender(E);
UpdateRefreshFlag();
///
///更新標識,並在正常提交中刪除該次提交的時間,並生產當前新的時間
)
{
地的Cookie模式
//與
HttpCookie餅乾= GetRefreshTicket();
cookie.Values .Remove(pageGuid);
log.Debug(「目前清除的cookie的變體是:」+ pageGuid);
}
//目前提交時間保存至隱藏域
ClientScript.RegisterHiddenField(HIDDEN_FIELD_NAME,submitTime);
, cookie.Values.Add( pageGuid,submitTime);
log.Debug(「UpdateRefreshFlag中目前的Cookie中存在的記錄數為:」+ C. .Count;我++)
#endregion
}
///
///驗證是否有刷新
私人布林CheckRefreshFlag()
{
的HttpCookie餅乾= GetRefreshTicket 的HttpCookie餅乾= GetRefreshTicket ();
字串pageGuid = GetCurPageGuid();
布林標記;
與(pookie.Value [pageGuid]! = NULL)
標誌= cookie.Values [pageGuid] .IndexOf(GetCurSubmit1())> -1;
log.Debug( 「提交時間存在,可提交」);
其他
回傳標誌;
}
///
///有已儲存的提交時間,沒有新建,有回
/// 摘要>
/// 工作> {
#地區的Cookie模式,回值為曲奇
的HttpCookie cookie的;
{
餅乾=新的HttpCookie(REFRESH_TICKET_ );
{
餅乾= Request.Cookies時[REFRESH_TICKET_NAME] 餅乾= Request.Cookies, 「讀取已存在的餅乾,曲奇當前存在的記錄數為:”+ cookie.Values.Count +“具體有以下幾條:”);
log.Info (「餅乾[」+ cookie.Values.GetKey(I)+「]:」+ cookie.Values [I]);
} #endregion
}
///
///取得目前提交時間
/// 摘要>
/// 回報>
字串submitTime = Request.Params [HIDDEN_FIELD_NAME] ==空值? 「」:Request.Params [HIDDEN_FIELD_NAME]的ToString();
log.Debug(「執行GetCurSubmitTime:
}
///
///設定頁面唯一標識,透過的Guid標識來區分每個頁面自己的提交時間
/// 摘要>
私人字串SetCurPageGu 字串GUID;
若(的IsPostBack!)
{
如果(Request.Params [HIDDEN_PAGE_GUID] == NULL)
{
GUID = System.Guid.NewGuid()的ToString()。
否則
地}
否則
{
}
回傳GUID;
}
///
///
/// 摘要>
/// 0>
字串pageGuid = Request.Params [HIDDEN_PAGE_GUID] ==空值? 「無」:Request.Params [HIDDEN_PAGE_GUID]的ToString();
log.Debug(「執行GetCurPageGuid(
}
}
999999999999999999999999999999999999999999999999刷新判斷功能時新頁面只需繼承該類別就可,通過引用屬性IsPageRefreshed識別“為真表示刷新,假則是正常提交”,將數據庫的操作寫在
如果(!IsPageRefreshed)
{
數據庫操作
}

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

C 語言中符號的使用方法涵蓋算術、賦值、條件、邏輯、位運算符等。算術運算符用於基本數學運算,賦值運算符用於賦值和加減乘除賦值,條件運算符用於根據條件執行不同操作,邏輯運算符用於邏輯操作,位運算符用於位級操作,特殊常量用於表示空指針、文件結束標記和非數字值。

在 C 語言中,char 類型在字符串中用於:1. 存儲單個字符;2. 使用數組表示字符串並以 null 終止符結束;3. 通過字符串操作函數進行操作;4. 從鍵盤讀取或輸出字符串。

C語言中通過轉義序列處理特殊字符,如:\n表示換行符。 \t表示製表符。使用轉義序列或字符常量表示特殊字符,如char c = '\n'。注意,反斜杠需要轉義兩次。不同平台和編譯器可能有不同的轉義序列,請查閱文檔。

多線程和異步的區別在於,多線程同時執行多個線程,而異步在不阻塞當前線程的情況下執行操作。多線程用於計算密集型任務,而異步用於用戶交互操作。多線程的優勢是提高計算性能,異步的優勢是不阻塞 UI 線程。選擇多線程還是異步取決於任務性質:計算密集型任務使用多線程,與外部資源交互且需要保持 UI 響應的任務使用異步。

在 C 語言中,char 和 wchar_t 的主要區別在於字符編碼:char 使用 ASCII 或擴展 ASCII,wchar_t 使用 Unicode;char 佔用 1-2 個字節,wchar_t 佔用 2-4 個字節;char 適用於英語文本,wchar_t 適用於多語言文本;char 廣泛支持,wchar_t 依賴於編譯器和操作系統是否支持 Unicode;char 的字符範圍受限,wchar_t 的字符範圍更大,並使用專門的函數進行算術運算。

在 C 語言中,char 類型轉換可以通過:強制類型轉換:使用強制類型轉換符將一種類型的數據直接轉換為另一種類型。自動類型轉換:當一種類型的數據可以容納另一種類型的值時,編譯器自動進行轉換。

char 和 unsigned char 是存儲字符數據的兩種數據類型,主要區別在於處理負數和正數的方式:值範圍:char 有符號 (-128 到 127),unsigned char 無符號 (0 到 255)。負數處理:char 可以存儲負數,unsigned char 不能。位模式:char 最高位表示符號,unsigned char 無符號位。算術運算:char 和 unsigned char 作為有符號和無符號類型,其算術運算方式不同。兼容性:char 和 unsigned char

C語言中char的使用錯誤和避免方法:未初始化char變量:使用常量或字符串文字初始化。超出字符範圍:比較變量值是否在有效範圍內(-128 到 127)。字符比較不區分大小寫:使用toupper()或tolower()轉換字符大小寫。使用char*引用字符數組時未加'\0':使用strlen()或手動添加'\0'標記數組結尾。使用char數組時忽略數組大小:明確指定數組大小或使用sizeof()確定長度。使用char指針時未檢查空指針:使用前檢查指針是否為NULL。使用char指針指向非字符數據
