亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Asp.Net中怎么防止刷新重復提交數據

發布時間:2021-07-16 11:51:54 來源:億速云 閱讀:128 作者:Leah 欄目:開發技術

這期內容當中小編將會給大家帶來有關Asp.Net中怎么防止刷新重復提交數據,文章內容豐富且以專業的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

代碼如下:


//頁面加載

protected void Page_Load(object sender, EventArgs e)

{

   //可以在頁面加載時設置頁面的緩存為“SetNoStore()”,即無緩存

   Response.Cache.SetNoStore();

   //Session中存儲的變量“IsSubmit”是標記是否提交成功的

   if ((bool)Session["IsSubmit"])

   {

     //如果表單數據提交成功,就設“Session["IsSubmit"]”為false

     Session["IsSubmit"] = false;

     //顯示提交成功信息

     ShowMsg.Text = " * 提交成功!";

   }

   else

     //否則的話(沒有提交,或者是頁面刷新),不顯示任何信息

     ShowMsg.Text = "";

}

//提交按鈕(btnOK)單擊事件

protected void btnOK_Click(object sender, EventArgs e)

{

   if (txtTitle.Text.ToString().Trim() == "")

     //ShowMsg是用來顯示提示信息的

     ShowMsg.Text = " * 標題不能為空!";

  else if (txtText.Text.ToString().Trim() == "")

     ShowMsg.Text = " * 內容不能為空!";

  else

   {

     //這里是將數據提交到數據庫中,省略

     /*

     string sql = "insert into tab...values(...)";

     MyConn.ExecQuery(sql);

     */

     //提交成功后,設“Session["IsSubmit"]”為true

     Session["IsSubmit"] = true;

     //強制轉換頁面(不可少,否則刷新仍會重復提交,仍轉到本頁),

     通過頁面的轉換將緩存中的提交的數據都釋放了,即提交的標單數據不會被保存到緩存里,

     如果后退的話,將會出現該頁無法顯示

     Response.Redirect("post.aspx");

  }

}

上面這個方法非常簡單也很實用,推薦大家使用。

下面是我自己研究出來的另一種方法,該方法不同于“不保存緩存的方法”,它是讓瀏覽器保存所有頁面緩存的。該方法通過隨機碼的方式 來判斷是正常提交還是“刷新”或“后退”的。

首先(提交頁面是post.aspx)在 Session 中 增加變量 Rnd 用來存放隨機碼,同時在提交表單數據時不做處理,而是讓頁面轉到 post.aspx?r=x,這里“x”等于Session["Rnd"],這個時候在頁面加載時,通過判斷r的值和Session["Rnd"]的值是否相同,如果相同就處理提 交的數據,否則即可認為是“刷新”或者是“后退”操作了,最后再次付給Session["Rnd"]一個隨機碼。

以下是該方法代碼(post.aspx):

復制代碼 代碼如下:


//獲取隨機碼

public class MyRnd

{

   public static string Rnd()

   {

     //隨機碼是由 0-9 a-z A-Z 之間的數字或字母組成的

     //下面是生成的20位隨機碼

     //0..9 A..Z a..z

     //48-57 65-90 97-122

     string rst = "";

     Random rr = new Random();

     for (int i = 0; i < 20; i++)

     {

       int ir = 0;

       do

       {

         ir = rr.Next(123);

         if((ir >= 48) && (ir <= 57)) break;

         else if((ir >= 65) && (ir <= 90)) break;

         else if ((ir >= 97) && (ir <= 122)) break;

       }

       while (true);

       rst += ((char)ir).ToString();

       }

     return rst;

   }

}

//頁面加載

protected void Page_Load(object sender, EventArgs e)

{

   //獲取URL中請求的“r”值,如果“r”不存在則 r=""

   string r = "";

   if(Request.QueryString["r"] != null)

     r = Request.QueryString["r"].ToString().Trim();

   string t;

   //獲取 “Session” 中的 “Rnd” 值,用于和“r”比較

   t = Session["Rnd"].ToString().Trim();

   //如果“r=t”則為提交操作,即可對表單的數據進行處理

  if(r == t)

  {

     if (txtTitle.Text.ToString().Trim() == "")

       ShowMsg.Text = " * 標題不能為空!";

     else if (txtText.Text.ToString().Trim() == "")

       ShowMsg.Text = " * 內容不能為空!";

     else      {

       //這里是將數據提交到數據庫中,省略

       /*

       string sql = "insert into tab...values(...)";

       MyConn.ExecQuery(sql);

       */

       //提交成功后清空表單數據

       txtTitle.Text = "";

       txtText.Text = "";

       //顯示提交成功信息

       ShowMsg.Text = " * 提交成功!";

     }

  }

   //否則可以認為是“刷新”或者“后退”操作

   else

   {

       txtTitle.Text = "";

       txtText.Text = "";

  }

  //最后要重新獲得“Session["Rnd"]”的值,并將“btnOK.PostBackUrl”設為“Session["Rnd"]”的值

  Session["Rnd"] = MyRnd.Rnd();

  btnOK.PostBackUrl ="post.aspx?r=" + Session["Rnd"].ToString().Trim();

}

//這里提交按鈕(btnOK)單擊事件就不需要寫任何代碼了

通過這種方法,每次加載頁面時“Session["Rnd"]”都將得到一個新的值,而在刷新或后退時就不會得到相同的“r”和“t”值,數據也就 不會被重復提交,只有通過“btnOK”來提交的操作才會得到“r==t”,數據才會被提交處理的,通過判斷隨機碼的方式來阻止刷新重復提交就 可以實現了。

上述就是小編為大家分享的Asp.Net中怎么防止刷新重復提交數據了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關知識,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

柏乡县| 苗栗县| 武夷山市| 建瓯市| 渝中区| 常山县| 新干县| 安义县| 布尔津县| 峨眉山市| 兴城市| 比如县| 青冈县| 舟曲县| 珲春市| 深泽县| 商丘市| 改则县| 出国| 镇江市| 固始县| 德江县| 高邑县| 建昌县| 潜山县| 灌南县| 昌图县| 高碑店市| 康平县| 昌吉市| 玛纳斯县| 班戈县| 沙坪坝区| 烟台市| 曲沃县| 万荣县| 晴隆县| 象山县| 屏山县| 林口县| 新田县|