在codebehind文件中声明全局变量

时间:2018-04-20 12:03:29

标签: c# asp.net

在下面的代码中,如何声明totalSquareFeet和其他变量全局,以便当我从asp.net文本框解析数据时,其他方法可以访问特定的performAnalysisButton按钮方法?

请注意,以下代码不完整。我删除了大部分代码,以使我的问题尽可能简单。为了给你一个后面的背景是2个按钮的目的:

  • okButton_Click:从文本框中获取数据(在asp.net webform中创建)并执行一些计算并在标签中显示结果。
  • performAnalysisButton_Click:从上述文本框中获取数据并执行一些计算并在另一个文本框中显示结果。

简而言之,我在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());
        }
    }

3 个答案:

答案 0 :(得分:2)

在往返后,页面返回到客户端,并且在服务器上没有保存信息,您将其保存在某处。这意味着您可以在隐藏字段内的页面上保存额外信息,也可以将其存储在Session或ViewState

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

Session["totalSquareFeet"] = totalSquareFeet;

然后您可以在performAnalysisButton_Click

中阅读它
int totalSquareFeet = (int)Session["totalSquareFeet"];

如果你想在离开页面后清理Session var,你可以

Session["totalSquareFeet"] = null;


ViewState 这将保存在页面上(致Alexandru Popa

ViewState["totalSquareFeet"] = totalSquareFeet;

int totalSquareFeet = (int)ViewState["totalSquareFeet"];


Hiddenfield 这将保存在页面上

将其存储在<asp:HiddenField ID="HiddentotalSquareFeet" runat="server" />

HiddentotalSquareFeet.Value = totalSquareFeet.ToString(); 

并阅读它

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

}

答案 1 :(得分:0)

如果我理解你的问题......

要将变量声明为全局变量,您需要做的就是在函数之外和您正在使用的类中声明它:

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...
}

因此,它是关于将函数内的声明从外部移除。

答案 2 :(得分:0)

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

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