这个开发场景是使用MultiView构建多栏目多选项卡的后台布局,并用UserControl分割时出现的。
因为MultiView在服务器端还是会初始化所有View中的所有控件,所以哪怕不是第一次展示的View也会执行,这个时候IsPostback判断就带来了问题。
由于最后控件没有输出到客户端,所以这些控件的stata没有记录,显示的就都是空了。
问题就归结到定制一个自己的 “IsPostBack“。
首先在一定范围(视你的MultiView嵌套程度决定)的用户控件插入一个父类,然后添加
public int BrowserTimes//记录下使用的次数
{
get
{
return (int)(ViewState[this.GetType().FullName] ?? 0);
}
set
{
ViewState[this.GetType().FullName] = value;
}
}
protected bool isFirstTime
{
get {
int times = (int)(ViewState[this.GetType().FullName] ?? 0);
BrowserTimes++;//保证只调用一次
return times == 0;
}
}
然后在相应的Multiview页中
void SetUserCenterControl(View v)
{
if (v.Controls.Count > 0 )
{
foreach (System.Web.UI.Control c in v.Controls)
{
UserCenterControl ucc = c as UserCenterControl;
if (ucc != null)
ucc.BrowserTimes++;
}
}
}
#region Change Tab Events
//Change Sections in User Center
protected void linkUserCenterChangeTab(object sender, CommandEventArgs e)
{
View v = mvUserCenter.Views[mvUserCenter.ActiveViewIndex];
SetUserCenterControl(v);
mvUserCenter.ActiveViewIndex = int.Parse(e.CommandArgument.ToString());
}