在下面的代码中,如何声明totalSquareFeet和其他变量全局,以便当我从asp.net文本框解析数据时,其他方法可以访问特定的performAnalysisButton按钮方法?
请注意,以下代码不完整。我删除了大部分代码,以使我的问题尽可能简单。为了给你一个后面的背景是2个按钮的目的:
简而言之,我在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());
}
}
答案 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); }
}