全局变量不保留其值

时间:2014-05-09 09:17:14

标签: asp.net postback

问题是,每次我回发时,我的变量“value”都不会保留它以前的值,并且字典总是为空。它没有任何以前保存的数据。我怎样才能保存数据?

这是代码:

public partial class MyCart : System.Web.UI.Page
        {
            public Dictionary<string, string> value = new Dictionary<string, string>();
            protected void Page_Load(object sender, EventArgs e)
            {
                    TextBox textbox = new TextBox();                
                    textbox.TextChanged += textbox_TextChanged;
                    textbox.ID = "textbox" + p.IDProduct.ToString();
                    Button button = new Button();
            }

            void textbox_TextChanged(object sender, EventArgs e)
            {
                   value.Add(((TextBox)sender).ID, ((TextBox)sender).Text);
            }
}

2 个答案:

答案 0 :(得分:3)

在{em> Postback 上重新创建global变量,您可能需要将变量放在ViewState中,以便在回发之间保留其数据。

如果数据很小,则可以使用ViewState,但如果数据很大,那么您可能需要考虑另一种存储介质可能是数据库。

要使用ViewState执行此操作,您需要类似的内容。

public Dictionary<string, string> value = new Dictionary<string, string>();
protected void Page_Load(object sender, EventArgs e)
{

     if(ViewState["valDic"] != null)
         value = (Dictionary<string, string>)ViewState["valDic"];
     TextBox textbox = new TextBox();                
     textbox.TextChanged += textbox_TextChanged;
     textbox.ID = "textbox" + p.IDProduct.ToString();
     Button button = new Button();
}   

void textbox_TextChanged(object sender, EventArgs e)
{
     value.Add(((TextBox)sender).ID, ((TextBox)sender).Text);
     ViewState["valDic"] = value;
}
  

视图状态是ASP.NET页面框架使用的方法   在往返之间保留页面和控制值。当HTML   呈现页面的标记,页面的当前状态和   在回发期间必须保留的值被序列化   base64编码的字符串。然后将此信息放入视图中   状态隐藏字段MSDN

答案 1 :(得分:1)

回发后,变量会在重新创建时丢失值。您可以依赖HTML隐藏的输入..

<强>标记:

<input id="Hidden1" type="hidden"  runat="server"  value=""/>

代码背后:

Hidden1.value="something";