这是各种代码,它几乎是自我解释的。在代码隐藏中有一些视图状态,然后有一个更新面板。当我将它添加到母版页引用的子页面中时,它会破坏我之前从用户控件中获得的所有以前工作的功能。
孩子掌握页面代码背后:
protected void Page_Load(object sender, EventArgs e)
{
try
{
if (!IsPostBack)
{
GetBrands();
GetStyles();
GetColors();
this.BindItemsList();
}
}
catch (Exception)
{ }
}
答案 0 :(得分:1)
尝试删除UpdatePannel
。如果这会修复您的代码,您就会将问题与ViewState
周围的实施隔离开来。 UpdatePannels
和ViewState
的问题并不少见。
答案 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();
}