预渲染母版页和ViewState

时间:2012-10-21 03:23:47

标签: c# asp.net viewstate master prerender

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

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


        }

3 个答案:

答案 0 :(得分:1)

尝试删除UpdatePannel。如果这会修复您的代码,您就会将问题与ViewState周围的实施隔离开来。 UpdatePannelsViewState的问题并不少见。

答案 1 :(得分:0)

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

我无法判断这是否可能是您的问题的原因,因为您没有提供任何代码,但您可能会尝试在PageLoad中执行您的逻辑。

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

答案 2 :(得分:-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();
}