使用HttpRequest作为全局变量

时间:2016-12-13 16:24:41

标签: c# asp.net

我有以下代码:

namespace CST
{
    public partial class frmBenefitSummaryList : System.Web.UI.Page
    {
        public string PlanID = Convert.ToString(Request.QueryString["PlanID"]);
        public string AuditID = Convert.ToString(Request.QueryString["AuditID"]);


        protected void Page_Load(object sender, EventArgs e)
        {
            this.MaintainScrollPositionOnPostBack = true;
            BindAccordions();

            if (!Page.IsPostBack)
            {
                LoadIssues();
                LoadResolutions();
                LoadNetworks();
                LoadStatus();
            }

        }
etc...

我需要做的是在我的代码的其他部分使用PlanID和AuditID。但是,当我尝试将它们公开时(正如我在上面的代码中所述),我收到一个错误:

  

字段初始值设定项不能引用非静态字段,方法或   property'Page.Request'

知道如何使这些变量全局化吗?

为了记录,我正在使用

从另一个页面打开此页面
        String SUrl = "frmSummary.aspx?PlanID=" + PlanID + "&AuditID=" + AuditID;
        Server.Transfer(SUrl, true);

2 个答案:

答案 0 :(得分:3)

  

...我必须根据用户的输入过滤一些数据,并将这些数据绑定到网格。为了让用户选择进入' BindAccordions()' ...

将您的BindAccordions()签名更改为BindAccordions(int planId, int auditId),然后在调用方法时将其传递

protected void Page_Load(object sender, EventArgs e)
{
  // note there is a null/empty check on the query string parameters and a default of 0 will be used if no value is included
  // it does not protect against unexpected values like "ABC"
  // if 0 is encountered and its not expected then you can return an error message or something else

  var planId = string.IsNullOrWhiteSpace(Request.QueryString["PlanID"])
    ? 0
    : int.Parse(Request.QueryString["PlanID"]);

  var auditId = string.IsNullOrWhiteSpace(Request.QueryString["AuditID"])
    ? 0
    : int.Parse(Request.QueryString["AuditID"]);

  if (!Page.IsPostBack) {
    // existing code before left unchanged ...
    BindAccordions(planId, auditId);
    // existing code after left unchanged ...
  }

@B2K的答案中指出的异常的根本原因是你试图在属性初始值设定项中使用类级别属性但是这是不允许的,因为不能保证属性(请求)本身在初始化程序运行时已初始化。

尽管最佳做法是尽可能限制范围,因此在这种情况下,将值传入您的方法被认为是最佳做法,因为它限制了这些变量的范围。

答案 1 :(得分:1)

问题是您在设置之前引用了Request对象。试试这个:

public partial class frmBenefitSummaryList : System.Web.UI.Page
{
    private string PlanID;
    private string AuditID;


    protected void Page_Load(object sender, EventArgs e)
    {
        PlanID = Request["PlanID"];
        AuditID = Request["AuditID"];

        this.MaintainScrollPositionOnPostBack = true;
        BindAccordions();

        if (!Page.IsPostBack)
        {
            LoadIssues();
            LoadResolutions();
            LoadNetworks();
            LoadStatus();
        }

    }