如何在这个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);
    }
}

如何在这个C#Webforms示例中确定变量范围

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());
    }
}