2

这是几乎不言自明的各种代码。代码隐藏中有一些视图状态的东西,然后有一个更新面板。当我将此添加到母版页引用的子页面中时,它会破坏我之前从用户控件中获得的所有以前工作的功能。
后面的子母版页代码:

    protected void Page_Load(object sender, EventArgs e)
        {
            try
            {
                if (!IsPostBack)
                {
                    GetBrands();
                    GetStyles();
                    GetColors();
                    this.BindItemsList();
                }
            }
            catch (Exception)
            { }


        }
4

3 回答 3

1

尝试删除UpdatePannel. 如果这修复了您的代码,您将把问题隔离到您的实现ViewState中。问题UpdatePannels并不ViewState少见。

于 2012-10-21T15:39:16.330 回答
0

PreRender 在处理控制事件后触发。在 PreRender 期间添加的任何控件都将忽略所有与控件相关的事件。

我不知道这是否可能是您的问题的原因,因为您没有提供任何代码,但您可以尝试在 PageLoad 中执行您的逻辑。

PreRender 是修改控件外观或添加非事件相关标记的好地方。

于 2012-10-21T04:00:19.013 回答
-1

您需要覆盖母版页的 CreateChildControls 方法并在此方法中填充控件。此方法应用于在页面和服务器控件的类后面的代码中创建子控件。这应该可以解决未为填充控件恢复 Viewstate 的问题。此外,有时 Viewstate 恢复的问题可能在于您如何在 PopulateControls 方法中添加控件。您应该确保首先将容器控件(如面板等)添加到控件集合中,然后才将控件添加到此容器中。

在任何情况下,您都需要尝试这样的事情:

/// <summary>
/// Called by the ASP.NET page framework to notify server controls that use composition-based 
/// implementation to create any child controls they contain in preparation for posting back or rendering.
/// </summary>
protected override void CreateChildControls()
{
    base.CreateChildControls();
    PopulateControls();
}
于 2012-10-21T10:59:42.607 回答