剛才讀到這個(gè)帖子:
http://www.cnblogs.com/arielyang/archive/2006/01/16/318044.html?Pending=true#Post
作者利用反射的方法,并且結(jié)合頁(yè)面基類的做法,實(shí)現(xiàn)了一種 QueryString 的方便的讀取方法。
然而,在我看來(lái),這種做法有些太重了。而我通常采用的做法如下敘述如下。
在一個(gè)公共的方法類里面這樣寫(xiě),

public class Util
{
private Util()
{}
// 從 querystring 集合中安全的取得一個(gè) string. (總是不會(huì)有 null,所以叫做 'Safe')
public static string GetStringSafeFromQueryString(Page page, string key)
{
string value = page.Request.QueryString[key];
return (value == null) ? string.Empty : value;
}
// 在上述基礎(chǔ)上,實(shí)現(xiàn)幾個(gè)常用類型的獲取方法。
public static int GetInt32SafeFromQueryString(Page page, string key, int defaultValue)
{
string value = GetStringSafeFromQueryString(page, key);
int i = defaultValue;
try
{
i = int.Parse(value);
} catch
{}
return i;
}
// double 的實(shí)現(xiàn)
public static double GetDoubleSafeFromQueryString(Page page,
string key, double defaultValue)
{
string value = GetStringSafeFromQueryString(page, key);
double d = defaultValue;
try
{
d = double.Parse(value);
} catch
{}
return d;
}
// 同理可以寫(xiě)出 float,
的實(shí)現(xiàn)
}在我的任何頁(yè)面里面,要獲取 querystring 的時(shí)候,只要這樣就可以了:
比如我要獲取一個(gè) string:
string name = Util.GetStringSafeFromQueryString(this, "name");
if (name.Length > 0)
{
// 進(jìn)行正常的處理

} else
{
// 不處理。
}獲取 int:
int id = Util.GetInt32SafeFromQueryString(this, "id", 0);
處理 double, float 等等方法完全一樣。
我認(rèn)為就一個(gè) QueryString 的處理沒(méi)必要上升到反射的高度,其實(shí)有時(shí)候反過(guò)來(lái)想想,實(shí)現(xiàn)的那么復(fù)雜也許會(huì)喪失一定的靈活性。比如我某個(gè)值忽然要改為從 Form 里面得到呢?從 Session 得到呢?這時(shí)候就可以比較出哪種做法更適合敏捷的適應(yīng)需求。
頁(yè)面里的 QueryString 的處理,之所以大家都很痛恨手工寫(xiě)編碼,無(wú)非是因?yàn)檫@么幾點(diǎn):
1. 需要判斷是否 == null 才敢用 .ToString(), 很不爽。稍微不注意,就會(huì)拋出異常導(dǎo)致頁(yè)面錯(cuò)誤。
2. 整形,double 等值類型從 QueryString 里面獲取的時(shí)候,不知道是否為合法的數(shù)值,因此 Parse 的時(shí)候總是要寫(xiě)重復(fù)的處理異常的代碼。
歸納一下,其實(shí),一個(gè)頁(yè)面用下列語(yǔ)法獲取一個(gè) QueryString 的時(shí)候,他得到的是如下東西:
(假設(shè)用 string name = Request.QueryString["name"]; 來(lái)獲取。)
1. ...test.aspx 得到 null
2. ...test.aspx?name= 得到 ""
3. ...test.aspx?name=abc 得到 "abc"
我認(rèn)為 1 和 2 的情況實(shí)際上從程序處理上來(lái)講,是沒(méi)有區(qū)別的。因此判斷 null 沒(méi)有必要,我們每次都將 null 的值自動(dòng)讓他轉(zhuǎn)為 string.Empty 應(yīng)該是比較安全的做法。
基于上述理由,我覺(jué)得如我上面所寫(xiě)的簡(jiǎn)單的工具類,就可以輕量級(jí)的解決安全的讀取 QueryString 的問(wèn)題。
有不對(duì)的地方,請(qǐng)大家多多指教。
