问题是,每次我回发时,我的变量“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);
}
}
答案 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";