如何在这个C#Webforms示例中确定变量范围
本文关键字:变量 范围 C#Webforms | 更新日期: 2023-09-27 18:26:12
如何将两个变量的值传递给ShowFooBar
单击事件?
当我运行下面的代码时,write语句中的变量没有值。
public partial class _Default : System.Web.UI.Page
{
string foo = String.Empty;
string bar = String.Empty;
protected void Submit_Click(object sender, EventArgs e)
{
if (SomeCondition(x,y))
{
foo = "apple";
bar = "orange";
}
}
protected void ShowFooBar_Click(object sender, EventArgs e)
{
Response.Write("foo=" + foo + "& bar=" + bar);
}
}
Web表单是无状态的,这意味着每次回发到其中一个单击事件时,都会从_Default类创建一个新的页面对象,其中foo和bar被实例化为空字符串,因此ShowFooBar_click事件将仅显示该对象
如果您希望在请求之间保持foo和bar的值,则必须将它们存储在某个位置,并在事件请求期间检索它们。根据您的需要,可以提供各种选项,如会话、视图状态、隐藏字段等。例如:
protected void Submit_Click(object sender, EventArgs e)
{
if (SomeCondition(x,y))
{
ViewState["foo"] = "apple";
ViewState["bar"] = "orange";
}
}
protected void ShowFooBar_Click(object sender, EventArgs e)
{
if(ViewState["foo"] != null && ViewState["bar"] != null)
{
Response.Write("foo=" + ViewState["foo"] + "& bar=" + ViewState["bar"]);
}
}
不,他们不会。在每次回发时,类都会被重新实例化,因此值会消失。您可以将它们持久化到cookie或数据库中,也可以将它们作为表单字段添加。
public partial class _Default : System.Web.UI.Page
{
protected void Submit_Click(object sender, EventArgs e)
{
if (SomeCondition(x, y))
{
ViewState["foo"] = "apple";
ViewState["bar"] = "orange";
}
}
protected void ShowFooBar_Click(object sender, EventArgs e)
{
Response.Write("foo=" + ViewState["foo"].ToString() + "& bar=" + ViewState["bar"].ToString());
}
}