即使在ASP.NET中,页面加载后也不会保留私有变量的值

时间:2013-02-19 21:37:12

标签: asp.net pageload findcontrol

我有两页。 first.aspx和second.aspx。为了从first.aspx获取所有控制值,我将指令添加到second.aspx

<%@ PreviousPageType VirtualPath="~/PR.aspx" %>

获取所有以前的页面控件并将其设置为标签没有问题,但是我将这些值保存到私有变量并在页面加载事件完成后重用它有一个大问题。这是代码示例。当我尝试从另一种方法的输入中获取值时,它没有添加任何内容。为什么?

    public partial class Second : System.Web.UI.Page
        {        
            List<string> input = new List<string>();
            protected void Page_Load(object sender, EventArgs e)
            {
                    if (Page.PreviousPage != null&&PreviousPage.IsCrossPagePostBack == true)
                    {
                        TextBox SourceTextBox11 (TextBox)Page.PreviousPage.FindControl("TextBox11");
                        if (SourceTextBox11 != null)
                        {
                            Label1.Text = SourceTextBox11.Text;
                            input.Add(SourceTextBox11.Text);
                        }
                     }
              }

            protected void SubmitBT_Click(object sender, EventArgs e)
        {
                  //do sth with input list<string>
                  //input has nothing in it here.
         }
       }

1 个答案:

答案 0 :(得分:0)

SubmitBT_Click - 点击事件发生在回发中。但是所有变量(和控件)都在页面生命周期的末尾处理。因此,您需要一种方法来保留List,例如在ViewStateSession

public List<String> Input
{
    get
    {
        if (Session["Input"] == null)
        {
           Session["Input"] = new List<String>();
        }
        return (List<String>)Session["Input"]; 
    }
    set { Session["Input"] = value; }
}

Nine Options for Managing Persistent User State in Your ASP.NET Application