2012年2月5日 星期日

ASP.NET 避免重新整理頁面資料被重複送出

最近做了一個頁面,遇到一個有與金額處理的頁面,當按鈕按下,資料送出並顯示結果,頁面在同一頁,如果此時按下重新整理,資料會再度的被送出。



解決的方法請參考以下網址:ASP.NET 如何避免頁面重新整理時重複送出

我這裡在再簡單註記一下解決流程:

1. 建立一個類別 BasePage.cs,首先繼承 System.Web.UI.Page,接著在其中新增幾個函式:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;


/// <summary>
/// BasePage 的摘要描述
/// </summary>
public class BasePage : System.Web.UI.Page
{
    public BasePage() 
    { this.PreRender += new EventHandler(Page_PreRender); }

    /// <summary>
    /// 設置戳記
    /// </summary>
    private void SetActionStamp()
    {
        Session["actionStamp"] = Server.UrlEncode(DateTime.Now.ToString());
    }

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

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

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

            return true;
        }
    }
}

2. 最後在要使用的頁面上繼承這個類別,例如:

public partial class Default : BasePage
{
    .....
    .....
}

3. 接著可以利用 this.IsRefresh 判斷這個頁面是否經由重新整理而來。

回目錄
回首頁


沒有留言 :

張貼留言

Related Posts Plugin for WordPress, Blogger...