好像是老生常谈的问题。小弟作了一个用户自定义空间,然后动态调用生成。页面成功,没有任何问题。当然,空间中包括textbox,然后使用按钮方式提交数据,但是在按钮点击事件中找不到已经创建的控件,高手们能不能帮帮忙啊。
代码如下:Do While j < Session("RecipientCount")            ReDim Preserve cc(j)
            ReDim Preserve lb(j)            cc(j) = Me.LoadControl("recipientctrl.ascx")
            cc(j).EnableViewState = True
            cc(j).ID = "recipient" & j
            Panel1.Controls.Add(cc(j))            lb(j) = cc(j).FindControl("Label1")
            lb(j).Text = (j + 1).ToString            j += 1
Loop循环方式动态创建控件,并且都给空间的id起名字了。
在button_click事件中以下述方法调用:dim tb as textbox
tb=me.FindControl("recipient" & 0).FindControl("TextBox1")注:TextBox1是用户空间中创建的
debug时,发现tb是nothing?小弟急用,高分求解,多谢各位。

解决方案 »

  1.   

    TextBox1是用户空键代码创建的话, 
    在执行 cc(j) = Me.LoadControl("recipientctrl.ascx")时
    并不执行recipientctrl.ascx中的事件。
    所以找不到TextBox1控件,使用LoadControl("recipientctrl.ascx")时
    recipientctrl.ascx中的事件都是在Page_load事件之后执行的。
      

  2.   

    现在情况是,用户控件可以被自动的创建出来,并且在循环中debug时,也可以找到id符合的空间。就是使用me.FindControl("recipient" & 0).FindControl("TextBox1") 的方法找到的,但是页面生成结束以后好像用户空间就消失了。sumbit时再找就找不到了。
      

  3.   

    动态创建的控件,必须每次页面加载都要添加控件.那你上面那段代码Do While j < Session("RecipientCount") ....
    要在Page_Load中调用
      

  4.   

    那段代码就是在Page_Load中写的。我现在可以让控件显示在页面上,但是无法在submit的时候使用,按钮事件中使用me.FindControl("recipient" & 0).FindControl("TextBox1") 找不到想要的控件,换句话说,控件已经不存在了。刚才又尝试debug,发现按钮点击事件的运行时首先会去Page_Load,但是在Page_Load时,控件已经不存在了。也就是说,客户端虽然能够看见控件,但是server端好像根本就没有,因为它是在code里动态创建的,程序执行完创建过程也就没有了。
      

  5.   

    在cc(j) = Me.LoadControl("recipientctrl.ascx") 上设置一个断点,看看回发时是否真的执行了这一条语句?如果没有执行,是不行的。
      

  6.   

    在按钮事件提交以后程序会回到Page_Load的函数中继续执行,我用debug单步执行过。现在的问题是按钮点击后我需要把控件中的值取出来,如果控件不存在了,那怎么取阿?是不是LoadControl的方法有问题,还是应该使用control.add方法?