代码阅读总结之ASP.NET StartKit TimeTracker(QueryString之改进笔记)
在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); } 这样我们在aspx页面中只要调用父类方法即可.方法会为我们处理异常. 例如: int id; GetQueryStringValue("",out id); 要是异常,方法会为我们处理,并转向页面ErrorQueryString.aspx 我们还可以在ErrorQueryString.aspx页面中做错误信息记录.例如把错误信息写到日志或者错误信息表中. 上面的方法现在只可以取string类型和int类型2种类型的参数 我们可以根据需要重载GetQueryStringValue方法即可. 我就在项目中重载了3次,还可以取枚举类型参数 |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |