【问题标题】:ASP.NET Partial Postback Update Panel Hidden Fields Clearing ProblemASP.NET 部分回发更新面板隐藏字段清除问题
【发布时间】:2011-09-16 14:53:18
【问题描述】:

我有一个 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
}

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

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

谢谢

【问题讨论】:

    标签: javascript asp.net asynchronous updatepanel postback


    【解决方案1】:

    回发之间不会保留类级别字段。使用会话状态集合来保存值。对于持久化控件,您可以使用<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);
    }
    

    【讨论】:

    • 所以我可以在类级别创建列表但让它在回发之间保持它的状态吗?像 List itemFields = (List)Session["itemFields"];或者其他的东西?我尝试使用带有 id="hiddenfields" 的占位符,但是在尝试访问 hiddenfields.Controls[0] 时出现了参数超出范围,即使我在回发之前已向占位符添加了控件
    • @Jimmy 你能贴出create hidden fields and add to list usinglookup field values 的代码吗?这会给我们一个更好的主意。
    • 我也在 xaml 中声明了这样的占位符:
    • 抱歉回复晚了,感谢您的详细建议。我尝试了你的第二种方法(因为我需要能够从客户端脚本访问 hiddenField 值).. 但不幸的是它没有工作,我得到一个 NullReferenceException 说“对象引用未设置为对象的实例”在 int x = Convert.ToInt32(hiddenField.Value);线。所以.. FindControl 返回 null。 :/知道为什么吗?谢谢
    • 我检查了占位符的 Controls.Count 值,当我想检查该值时它为 0。所以它似乎没有在回发中始终保持隐藏字段?我肯定在回发之前为占位符添加了很多控件...
    猜你喜欢
    • 1970-01-01
    • 2011-09-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多