Multiview + UserControl 中UserControl如何判断首次执行

这个开发场景是使用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());
        

    }
作者:KKcat
    
个人博客:http://jinzhao.me/
    
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
原文地址:https://www.cnblogs.com/jinzhao/p/1617123.html