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 判斷這個頁面是否經由重新整理而來。

回目錄
回首頁


2012年1月22日 星期日

網站在各地區排名查詢

Google 各 國家 / 地區 (Country / Region) 的站台,可利用以下方式來查詢排名的不同。


先進入以下網址:
Language Tools:http://www.google.com/language_tools

可以比較台灣地區與日本的排名,就看你的網站的 SEO 是不是在各個國家都受歡迎。



回首頁



HtmlAgilityPack 遇到擷取亂碼網頁的解決方法



解決方法就是:

1. 先到 http://htmlagilitypack.codeplex.com 下載 HtmlAgilityPack 原始碼。

依照下面方式點擊即可下載。



2. 下載完畢,解壓縮檔案到 \HtmlAgilityPack.1.4.0.Source\HtmlAgilityPack\HtmlWeb.cs 的 1466 行左右,有一段程式碼:

Encoding respenc = !string.IsNullOrEmpty(resp.ContentEncoding)
                       ? Encoding.GetEncoding(resp.ContentEncoding)
                       : null;

修改改成以下所示:

Encoding respenc;

if ((resp.ContentEncoding != null) && (resp.ContentEncoding.Length > 0))
{
    respenc = System.Text.Encoding.GetEncoding(resp.ContentEncoding);
}
else if ((resp.CharacterSet != null) && (resp.CharacterSet.Length > 0))
//根據Content-Type中獲取的charset  
{
    if (string.Compare(resp.CharacterSet, "UTF-8", true, 
    System.Globalization.CultureInfo.InvariantCulture) == 0)
        respenc = System.Text.Encoding.GetEncoding("UTF-8");
    else if (string.Compare(resp.CharacterSet, "BIG5", true, 
    System.Globalization.CultureInfo.InvariantCulture) == 0)
        respenc = System.Text.Encoding.GetEncoding("BIG5");
    else if (string.Compare(resp.CharacterSet, "iso-8859-1", 
    true, System.Globalization.CultureInfo.InvariantCulture) == 0)
        respenc = System.Text.Encoding.GetEncoding("UTF-8");
    else
        respenc = System.Text.Encoding.GetEncoding(resp.CharacterSet);
}
else
{
    respenc = System.Text.Encoding.GetEncoding("UTF-8");
}

再將整個專案重建,參考到 \HtmlAgilityPack.1.4.0.Source\HtmlAgilityPack\bin\Debug\HtmlAgilityPack.dll 來使用。

回目錄
回首頁