ASP.NET部分回发更新面板隐藏字段清除问题

时间:2011-06-16 18:10:02

标签: javascript asp.net asynchronous updatepanel postback

我有一个UpdatePanel,在我的updatepanel_Load中,我有一些看起来像这样的代码:

if (!IsPostBack || triggeredRefresh.Value == "1") 
{
create hidden fields and add to list using
itemFields.Add(newField);
} 
else if ( triggeredCheck.Value == "1" )
{
lookup field values
}

列表在类级别使用: 列出itemFields = new List();

问题是每当我想在隐藏字段中查找值时,列表都是空的。为什么此时它是空的,我该如何解决?

由于

1 个答案:

答案 0 :(得分:0)

回发之间不会保留类级别字段。使用会话状态集合来持久化值。对于持久控件,您可以使用<asp:PlaceHolder />

编辑:

如果您使用HiddenField只存储单个值并从服务器端访问,如果没有从客户端脚本访问它,您可以执行类似这样的操作。

删除班级列表。

if (!IsPostBack || triggeredRefresh.Value == "1") 
{
    Session["someValueKey"] = 0;
} 
else if ( triggeredCheck.Value == "1" )
{
    var x = Convert.ToInt32(Session["someValueKey"]);
}

如果您确实需要一个值列表,那么您可以

if (!IsPostBack || triggeredRefresh.Value == "1") 
{
    Session["someValueKey"] = new List<int>{100,200};
} 
else if ( triggeredCheck.Value == "1" )
{
    var x = Session["someValueKey"] as List<int>();
}

如果您确实需要它作为控件(从客户端脚本访问),您可以

if (!IsPostBack || triggeredRefresh.Value == "1") 
{
   HiddenField hiddenField = new HiddenField();
   hiddenField.ID ="hiddenField1";
   hiddenField.Value = "0";
   placeHolder1.Controls.Add(hiddenField);
} 
else if ( triggeredCheck.Value == "1" )
{
    HiddenField hiddenField = placeHolder1.FindControl("hiddenField1") as HiddenField;
    var x = Convert.ToInt32(hiddenField.Value);
}