spiderman

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

目的:在App_code中建一个类,实现一些公共操作,代码如下

 

using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Text;
using System.Web.Security;
using System.Web.UI;
using System.Web.SessionState;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.IO;
using System.Text.RegularExpressions;

/// <summary>
/// Common 的摘要说明
/// </summary>
public class Common : System.Web.UI.Page
{
    public Common()
    {
        //
        // TODO: 在此处添加构造函数逻辑
        //
    }

    /// <summary>
    /// 获取querystring
    /// </summary>
    /// <param name="s">参数名</param>
    /// <returns>返回值</returns>
    public static string q(string s)
    {
        if (Request.QueryString[s] != null)
        {

            return Request.QueryString[s].ToString();
        }
        return string.Empty;
    }

    /// <summary>
    /// 获取post得到的参数
    /// </summary>
    /// <param name="s">参数名</param>
    /// <returns>返回值</returns>
    public static string f(string s)
    {
        if (Request.Form[s] == null) return string.Empty;
        return Request.Form[s];
    }

调用时: Response.Redirect("http://www.cnblogs.com/Logon.aspx?BackID=" + Common.q("ID"));

结果报错:非静态的字段、方法或属性“System.Web.UI.Page.Request.get”要求对象引用。

此种情景下用一些朋友提供的解决方案,如放在page_load下就不适用了,或者改为

public String Temp {
get{return Request.Params["iCustomerId"];}  //报错:System.Web.HttpException: 请求在此上下文中不可用
},调用时

Common cm=new Common()

string ss=cm.Temp.toString();

的方式也报错:System.Web.HttpException: 请求在此上下文中不可用

我的解决方案:

1. 添加前缀 "HttpContext.Current" 。(有的朋友不提倡这种方式,不知为何)  

    /// <summary>
    /// 获取querystring
    /// </summary>
    /// <param name="s">参数名</param>
    /// <returns>返回值</returns>
    public static string q(string s)
    {
        if (HttpContext.Current.Request.QueryString[s] != null)
        {

            return HttpContext.Current.Request.QueryString[s].ToString();
        }
        return string.Empty;
    }

    /// <summary>
    /// 获取post得到的参数
    /// </summary>
    /// <param name="s">参数名</param>
    /// <returns>返回值</returns>
    public static string f(string s)
    {
        if (HttpContext.Current.Request.Form[s] == null) return string.Empty;
        return HttpContext.Current.Request.Form[s];
    }

2.  继承方式

Common下的方法定义如下(没什么特殊的,就按常规定义):

 

    public string q(string s)
    {
        if (Request.QueryString[s] != null)
        {

            return Request.QueryString[s].ToString();
        }
        return string.Empty;
    }

 

引用页(如NewsList):

public partial class NewsList: Common  //将本页定义为继承自Common

{

Response.Redirect("http://www.cnblogs.com/Logon.aspx?BackID=" + q("ID"));

}

 

结论:虽然解决方法找到了,但是内在原因不是很明了,请高手指导!

发现对一些类的实例化及静态方法调用方面的理解还有很大欠缺。最近经常发现在一些本以为不会出问题的地方栽跟头,还需要加强基本功啊!!

 

续:找到一些关于此问题的解释

 

【Question:】
can someone tell me the difference between the httpcontext and
httpapplication object, they seems to have similar methods, such as
getting the Response, REquest, Server
 variables

【Answer:】
Request/Server/Session are the same.

HttpApplication actually uses the context to return them...
Here's the code for the HttpApplication.Request:

public HttpRequest Request
{
get
{
HttpRequest request1 = null;
if ((this._context != null) && !this._hideRequestResponse)
{
request1 = this._context.Request;
}
if (request1 == null)
{
throw new
HttpException(HttpRuntime.FormatResourceString("Re quest_not_available"));
}
return request1;
}
}


【When you are in a page/usercontrol...just use Request and Response no need
to use Application.Request and HttpContext.Current.Request. They are
properties exposed by the Control class.】

【when you are in a non-control class, use
HttpContext.Current.Request/Response/....】

Other than that, they do offer different functionality. They also offer
different storage capabilities

 

【request 与 context.request 没有区别
Page 页中 实际上也是用到 System.Web.HttpContext.Current.Request
他调用的函数是:
public HttpRequest Request { get{return System.Web.HttpContext.Current.Request;} }

只要在同一个网站中 他们两获取的值都是一样的
可以放心使用】

 

posted on 2009-06-29 17:56  spiderman  阅读(9376)  评论(2)    收藏  举报