[ASP.NET] 讓 Show 訊息變簡單

  • 8049
  • 0
  • 2009-12-08

摘要:[ASP.NET] 讓 Show 訊息變簡單

Introduction

自己在練習寫 web 程式,有時候可能需要印出一些值或是 show 出訊息,來檢視程式的正確性。

一開始都是組 javascript alert 字串,後來知道 asp.net 有提供一些方法,透過封裝或是模組化,

用起來還滿方便的,介紹給大家我的用法。

 

Example

sample1

將 show 字串的功能函式寫在 PageBase 中,這樣每一個繼承的子 page ,都可以使用。

 public partial class PageBase : System.Web.UI.Page {     
        protected void ShowMsg(string value) {
            ClientScriptManager oCSM = Page.ClientScript;
            Random oRandom = new Random();
            string scriptkey = oRandom.Next(1000).ToString();
            oCSM.RegisterStartupScript(this.Page.GetType(), scriptkey, "alert('" + value + "');", true);
        }
    }   

 

Client 端用法:

public partial class Default : PageBase {
        protected void Page_Load(object sender, EventArgs e) {
            ShowMsg("Test");
        }
    }

 

輸出結果:

 

sample2

將這個功能抽出,成為組件的一部分。

 

using System.Web.UI;
public class TWMsg {
        public static void ShowMsg(System.Web.UI.Page ActPage,string value) {
            //取得 ClientScriptManager 物件。
            ClientScriptManager oCSM = ActPage.ClientScript;

            //建立亂數 scriptkey 。
            Random oRandom = new Random();
            string scriptkey = oRandom.Next(1000).ToString();

            //印出訊息,這邊 scriptkey 參數給定 null 值,也是可以正常執行的
            oCSM.RegisterStartupScript(ActPage.GetType(), scriptkey, "alert('" + value + "');", true);          
        }
    }

 

Client 端程式碼:

public partial class Default : PageBase {
        protected void Page_Load(object sender, EventArgs e) {
            TWMsg.ShowMsg(this.Page, "DefaultPage");      
        }
    }

 

輸出結果:

 


修正:

v1.2 : 加入 Microsoft Anti-Cross Site Scripting Library v3.1

撰寫 TMsgBox 類別

using System.Web.UI;
using Microsoft.Security.Application;

namespace TestMsgBox {
    public class TMsgBox {
        public static void ShowMsg(System.Web.UI.Page ActPage, string value) {
            TMsgBox oTMsgBox = new TMsgBox();
            oTMsgBox.ProcessShowMsg(ActPage, value);
            
        }

        private void ProcessShowMsg(System.Web.UI.Page ActPage, string value) {
            TMsgBox oTMsgBox = new TMsgBox();
            string sResult = string.Empty;
            sResult = oTMsgBox.FilterAndEncodeStr(value);
            oTMsgBox.RegisterStartupScript(ActPage, sResult);
        }       

        private string FilterAndEncodeStr(string value) {
            string sFilterValue = string.Empty;
            sFilterValue = value;
            //過濾 HTML 字串。
            sFilterValue = AntiXss.GetSafeHtmlFragment(sFilterValue);
            //將字串進行編碼。
            sFilterValue = AntiXss.JavaScriptEncode(sFilterValue);
            return sFilterValue;
        }

        private void RegisterStartupScript(System.Web.UI.Page ActPage, string value) {
            Random oRandom = new Random();
            string scriptkey = oRandom.Next(1000).ToString();
            ClientScriptManager oCSM = ActPage.ClientScript;
            oCSM.RegisterStartupScript(ActPage.GetType(), scriptkey, @"alert(" + value + @");", true);
        }        
    }
}

 

PgaeBase code :

    public partial class PageBase : System.Web.UI.Page {     
        protected void ShowMsg(string value) {
            TMsgBox.ShowMsg(Page, value);
        }
    }

 

page code :

    public partial class Page : PageBase {
        protected void Page_Load(object sender, EventArgs e) {
            //測試輸入字串            
            string s = @" 'My Name is Page.' ";                      
            ShowMsg(s);
        }
    }

 

輸出結果

 

若輸出的字串需要換行,可是 AntiXss.GetSafeHtmlFragment(sFilterValue); 函式,

又會將 \r\n 濾掉,不知有沒有解決方法。

 

 

Link

Microsoft Anti-Cross Site Scripting Library V3.1 下載

 

三小俠  小弟獻醜,歡迎指教