快速业务通道

代码阅读总结之ASP.NET StartKit TimeTracker(QueryString之改进笔记)

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-05-19

在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 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号