預防重複發送【後端篇】

Designed by Freepik
表單會因為回到上一頁,或是重新整理頁面
導致使用者重複送出Post
整理一下網路上找到的防止重複Post的方法
阿諾提供的方法,比之前使用的noCache設定更為有效
來源【阿諾的個人知識庫】
圖片來源Designed by Freepik


  1. 1. 建立一個類別BasePage.cs
首先繼承System.Web.UI.Page,並新增相關物件、函數、建構子。
先新增一個BasePage.cs類別 using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

public class BasePage : System.Web.UI.Page
{
  public BasePage()
  {
    this.PreRender += new EventHandler(Page_PreRender);
  }

  /// < summary>
  /// BasePage 的摘要描述
  /// < /summary>
  private void SetLoadTime()
  {
    Session["loadTime"] = Server.UrlEncode(DateTime.Now.ToString());
  }

  void Page_PreRender(object sender, EventArgs e)
  {
    if (!IsPostBack)
    {
      SetLoadTime();
    }

    ClientScript.RegisterHiddenField("loadTime", Session["loadTime"].ToString());
  }

  /// < summary>
  /// 取得值,指出網頁是否經由重新整理動作回傳 (PostBack)
  /// < /summary>
  protected bool IsRefresh
  {
    get
    {
      if (HttpContext.Current.Request["loadTime"] as string == Session["loadTime"] as string)
      {
        SetLoadTime();
        return false;
      }

      return true;
    }
  }
}

  1. 2. 使用的ASP.NET頁面上繼承這個類別:
繼承BasePage類別
public partial class Default : BasePage
{
  .....
  .....
}

  1. 3. 提交按鈕加入判斷:
protected void btnSubmit_Click(object sender, EventArgs e)
{
 if (!this.IsRefresh)
 {
  .....
 }
}

可以確實有效的防止使用者重新整理頁面重複送出資料

沒有留言:

張貼留言

技術提供:Blogger.