【问题标题】:The global variable doesn't keep its value全局变量不保持其值
【发布时间】:2014-05-09 09:17:14
【问题描述】:

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

这是代码:

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

【问题讨论】:

    标签: asp.net postback


    【解决方案1】:

    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

    【讨论】:

    • 好的,我明白了。谢谢!
    【解决方案2】:

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

    标记:

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

    背后的代码:

    Hidden1.value="something";
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多