在ASP.NET StartKit TimeTracker中使用了大量QueryString
例如:
http://localhost/TTWebCSVS_cn/ProjectList.aspx?index=2
現在讓我們在IE地址裡面敲入下面的地址,會出現什麼情況?
http://localhost/TTWebCSVS_cn/ProjectList.aspx?index=a2
或者
http://localhost/TTWebCSVS_cn/ProjectList.aspx?index=
很明顯參數index要求接到的是整數.而我們敲入的地址中參數不符合要求,異常.
那有沒有辦法避免這類情況的發生呢?
其實我們可以定義一個頁面基類.
public class PageBase :System.Web.UI.Page
讓系統中的其他aspx頁面繼承PageBase.
把取得QueryString中數值寫成方法,放在基類中.
在基類編寫3個方法.
<summary> /**//// 得到QueryString參數的數值 /// </summary> /// <param name="queryStringName">QueryString參數的名稱</param> /// <param name="result">QueryString參數的數值(string類型)</param> protected void GetQueryStringValue(string queryStringName,out string result) { result=String.Empty; result=Request.QueryString[queryStringName]; //沒有接到參數,異常,轉到出錯誤頁 if (result==null || result=="") { errorPageRedirect(); } } /**//// <summary> /// 得到QueryString參數的數值 /// </summary> /// <param name="queryStringName">QueryString參數的名稱</param> /// <param name="result">QueryString參數的數值(int類型)</param> protected void GetQueryStringValue(string queryStringName,out int result) { string str; GetQueryStringValue(queryStringName,out str); result=0; try { result=Convert.ToInt32(str); } catch(OverflowException) { //小於int的MinValue或大於int的MaxValue,異常,轉到出錯誤頁 errorPageRedirect(); } catch(FormatException) { //非數字字符,異常,轉到出錯誤頁 errorPageRedirect(); } catch(ArgumentException) { //空引用,異常,轉到出錯誤頁 errorPageRedirect(); } } /**//// <summary> /// 發生錯誤時,頁面轉向 /// </summary> protected void errorPageRedirect() { Response.Redirect("ErrorQueryString.aspx",true); }