代码阅读总结之ASP.NET StartKit TimeTracker(QueryString之改进笔记)2012-01-18 博客园 aierong在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); }