Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/262.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在这个C#Webforms示例中,如何确定变量范围?_C#_Asp.net_Webforms - Fatal编程技术网

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

在这个C#Webforms示例中,如何确定变量范围?,c#,asp.net,webforms,C#,Asp.net,Webforms,如何将这两个变量的值传递给ShowFooBarclick事件 当我运行下面的代码时,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

如何将这两个变量的值传递给
ShowFooBar
click事件

当我运行下面的代码时,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);
    }
}

不,他们不会。在每次回发时,该类都会重新实例化,因此这些值将消失。您可以将它们持久化到cookie或数据库中,或者将它们添加为表单字段。

Web表单是无状态的,这意味着每次回发到这些单击事件之一时,都会从默认类创建一个新的页面对象,其中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"]);
        }
    }

我认为在page_load事件中需要使用if(IsPostback){}来维护变量的值。我通过将值写入页面文本并在第二次单击事件中检索来解决此问题。为什么在内置ViewState时使用页面文本?Andy Rose,有趣的评论,这两种方法之间有区别吗?@mmcglyn-没有真正的区别,只是工作量少了一点,因为不需要向表单中添加任何内容来存储变量。ViewState有其批评者,这是正确的,但在这种情况下,我认为它将是手头工作的理想工具。从数据库检索值的问题是我如何确定要选择的值?这是同样的问题。你到底想达到什么目的?Pankaj Garg,看我对原始问题的评论。
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());
    }
}