博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

刚刚有个需求要改,在一个用户控件中添加一个上传文件的按钮,触发这个按钮的前提是需要验证用户的身份,这个判断事件是后台触发的,在引用它的aspx页面中也有类似的功能按钮,所以想到,在加载aspx页面后,再去创建这个按钮的事件,找了些资料,实现了这个功能,记录下。

 

首先在用户控件中,定义一个属性来保存这个按钮属性,普通的Button就可以:

 

        public Button button
        {
            get { return button1; }//button1为此按钮的ID
        }

但是我的用户控件的页面中,使用了一个Repeater,所以我在获取它的值时:

 

调用的问题:当我在引用的aspx页面的page_load中直接去调用button时是可以的,但是直接调用这个属性是不可以的,此时,Repeater1.Items.Count的值是为0的
        public LinkButton InnerButton
        {
            get 
            { 
                LinkButton lnkShow = (LinkButton)Repeater1.Items[0].FindControl("lnkShow");//获取上传按钮
                return lnkShow;
            }
        }

 

在引用了此按钮所在的用户控件的aspx页面中,在page_load事件中去获取它,并且为它绑定一个事件

 

  protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
               .............
            }
            else //我在这里的写法是如果页面回调的时候才去执行下面的操作,页面初始化时,是无法绑定控件当中的按钮事件的,我想这是页面生命周期的问题吧,以后再研究研究
            {  
                if (string.IsNullOrEmpty(HidUser.Value.Trim()))//判断用户的权限,是否已经登录
                {
                    //注册用户控件中的按钮事件
                    UCScenicCards.InnerButton.Click += new EventHandler(Login_Click);
                }
            }
            }

 对了,还要写一个对应的Login_Click事件:

 

        protected void Login_Click(object sender, EventArgs e)
        {
            if (string.IsNullOrEmpty(HidUser.Value.Trim()))
            {
                UserLogin();
            }
        }