C# 在代码隐藏文件中声明全局变量

C# 在代码隐藏文件中声明全局变量,c#,asp.net,C#,Asp.net,在下面的代码中,如何声明totalSquareFeet和其他变量为全局变量,以便在解析asp.net文本框中的数据时,其他方法可以访问它,特别是执行分析按钮方法 请注意,下面的代码不完整。我删除了大部分代码,使我的问题尽可能简单。为给您提供背景信息,以下是两个按钮的用途: 确定按钮\单击:从文本框(在asp.net webform中创建)获取数据,执行一些计算并在标签中显示结果 performAnalysisButton_单击:从上述文本框中获取数据,执行一些计算并在另一个文本框中显示结果

在下面的代码中,如何声明totalSquareFeet和其他变量为全局变量,以便在解析asp.net文本框中的数据时,其他方法可以访问它,特别是执行分析按钮方法

请注意,下面的代码不完整。我删除了大部分代码,使我的问题尽可能简单。为给您提供背景信息,以下是两个按钮的用途:

  • 确定按钮\单击:从文本框(在asp.net webform中创建)获取数据,执行一些计算并在标签中显示结果
  • performAnalysisButton_单击:从上述文本框中获取数据,执行一些计算并在另一个文本框中显示结果
简而言之,我在okButton_Click方法下声明的所有局部变量,我想在performAnalysisButton_Click方法下使用它们。我想知道是否有一种方法可以避免再次解析文本框数据

    public partial class Default : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            // Create objects for fiscal year end dates (e.g. 12/31/17)
            FiscalYearEnds fiscalYearEnds = new FiscalYearEnds();
            firstFiscalYearEndLabel.Text = String.Format("{0:MM/dd/yyyy}", fiscalYearEnds.firstFiscalYearEndDate());
            secondFiscalYearEndLabel.Text = String.Format("{0:MM/dd/yyyy}", fiscalYearEnds.secondFiscalYearEndDate());            
        }

        protected void okButton_Click(object sender, EventArgs e)
        {
            // Parse values
            int totalSquareFeet = int.Parse(totalSqFtTextBox.Text);
            int totalOccupiedSquareFeet = int.Parse(occupiedSqFtTextBox.Text);
            decimal grossRentsFirstYear = decimal.Parse(grossRentsFirstYearTextBox.Text);
            decimal grossRentsSecondYear = decimal.Parse(grossRentsSecondYearTextBox.Text);
            int loanAmount = int.Parse(loanAmountTextBox.Text);
            double interestRate = double.Parse(interestRateTextBox.Text);
            int loanTerm = int.Parse(yearlyLoanTermTextBox.Text);                                    
        }
        protected void performAnalysisButton_Click(object sender, EventArgs e)
        {
            Analysis analysis = new Analysis();
            analysis.GrossRentFirstYear = decimal.Parse(grossRentsFirstYearTextBox.Text);
            analysis.GrossRentSecondYear = decimal.Parse(grossRentsSecondYearTextBox.Text);
            analysisAndComments.Text = String.Format("{0}", analysis.PerformAnalysis());
        }
    }

如果我没弄错你的问题

要将变量声明为全局变量,只需在函数外部和正在使用的类内部声明它:

public partial class Default : System.Web.UI.Page
{
    int totalSquareFeet = 0;

    protected void Page_Load(object sender, EventsArg e)
    { // And the rest of the code should be the same...
    }
    // Same code as you had...
}

所以,这是关于从函数内部到外部删除声明的问题。

如果我没弄错你的问题

要将变量声明为全局变量,只需在函数外部和正在使用的类内部声明它:

public partial class Default : System.Web.UI.Page
{
    int totalSquareFeet = 0;

    protected void Page_Load(object sender, EventsArg e)
    { // And the rest of the code should be the same...
    }
    // Same code as you had...
}

因此,它是关于从函数内部到外部删除声明。

在往返之后,页面返回到客户端,除非将其保存在某个位置,否则服务器上不会保存任何信息。这意味着您可以将页面上的额外信息保存在hiddenfield中,也可以将其存储在会话或ViewState中

会话这将保存在服务器上(如果转到其他页面也可用)

然后,您可以在
performAnalysisButton\u单击

int totalSquareFeet = (int)Session["totalSquareFeet"];
如果你想在离开页面后清理会话变量,你可以这样做

Session[“totalSquareFeet”]=null


ViewState这将保存在页面上(贷记到)

阅读


Hiddenfield这将保存在页面上

将其存储在

然后再读一遍

if(int.TryParse(HiddentotalSquareFeet.Value, out int totalSquareFeet)){

}

往返之后,页面返回到客户端,除非您将信息保存在某个位置,否则服务器上不会保存任何信息。这意味着您可以将页面上的额外信息保存在hiddenfield中,也可以将其存储在会话或ViewState中

会话这将保存在服务器上(如果转到其他页面也可用)

然后,您可以在
performAnalysisButton\u单击

int totalSquareFeet = (int)Session["totalSquareFeet"];
如果你想在离开页面后清理会话变量,你可以这样做

Session[“totalSquareFeet”]=null


ViewState这将保存在页面上(贷记到)

阅读


Hiddenfield这将保存在页面上

将其存储在

然后再读一遍

if(int.TryParse(HiddentotalSquareFeet.Value, out int totalSquareFeet)){

}

我通过在类级别声明属性解决了这个问题,这些属性成为了我的全局变量,我可以在button方法中访问它们。现在我不需要在按钮方法中再次解析文本框值。见下例:

 public int totalSquareFeet
    {
        get { return int.Parse(totalSqFtTextBox.Text); }
        set { int.Parse(totalSqFtTextBox.Text); }
    }

我通过在类级别声明属性解决了这个问题,这些属性成为了我的全局变量,我可以在button方法中访问它们。现在我不需要在按钮方法中再次解析文本框值。见下例:

 public int totalSquareFeet
    {
        get { return int.Parse(totalSqFtTextBox.Text); }
        set { int.Parse(totalSqFtTextBox.Text); }
    }

我不太清楚你的问题。也许您应该更详细地了解用户操作的流程,以及他如何填充这些文本框。您可以在默认类(任何方法之外)中将totalSquareFeets变量声明为私有字段,并在您想要的任何方法中对其进行修改,但我不建议使用这种方法,因为totalSquareFeets变量将与您的webform类一样有效。也许您可以访问performAnalysis操作中的totalSqFtTextBox.Text并再次解析它。看起来更自然。我在okButton_Click方法下声明的所有局部变量,我想在performAnalysisButton_Click方法下使用它们。我想知道是否有一种方法可以避免再次解析文本框数据?您是否正在构建一个一次只供一个人使用的网站?如果不是,您就不想考虑“全局变量”。每个用户的数据最终都会覆盖其他用户的值。是的,这将是一个由单个用户使用的简单应用程序。我还是编程新手。@Amit,有比全局变量更聪明的方法。如果您不想解析文本,您应该尝试使用比asp:TextBox更多的用户限制控件。例如,我使用了Telerik.RadNumericTextBox,它是一个只接受数值输入的派生类,您可以通过Value属性访问它。我不确定我是否很好地理解了您的问题。也许您应该更详细地了解用户操作的流程,以及他如何填充这些文本框。您可以在默认类(任何方法之外)中将totalSquareFeets变量声明为私有字段,并在您想要的任何方法中对其进行修改,但我不建议使用这种方法,因为totalSquareFeets变量将与您的webform类一样有效。也许您可以访问performAnalysis操作中的totalSqFtTextBox.Text并再次解析它。看起来更自然。我在okButton_Click方法下声明的所有局部变量,我想在performAnalysisButton_Click方法下使用它们。我想知道是否有一种方法可以避免再次解析文本框数据?您是否正在构建一个一次只供一个人使用的网站?如果不是,您就不想考虑“全局变量”。每个用户的数据最终都会覆盖其他用户的值。是的,这将是一个由单个用户使用的简单应用程序