还有一个问题:如果我直接在Page上添加控件,则会出现错误:
Control '_ctl0' of type 'WebButton' must be placed inside a form tag with runat=server. 
为何?

解决方案 »

  1.   

    The First Ques:
           You should add some code to check the IsPostBack in Page_Load method. If post bask, add the buttonI think It'll much better if you place the control on the page and hide it if it's necessary to show
      

  2.   

    动态添加的控件不会保持状态,回发就消失了,如果你想回发保存那么保证代码在Page_Load里面执行。
      

  3.   

    同意楼上,不要放在IsPostBack中来做,但那样可能就不能保存状态了
      

  4.   

    动态加载控件的代码不要放在if(!Page.IsPostback){}中,就可以了.
      

  5.   

    对于这个问题---还有一个问题:如果我直接在Page上添加控件,则会出现错误:你肯定是用的page.controls.add
    不要这样用!应该是page.controls(1).controls.add
      

  6.   

    对于第一个问题,上面各位已经说得很清楚了~~不要再not ispostback中动态添加控件
      

  7.   

    动态加载,我的做法是if(ispostback)
    {
    if (user.identity.isauthenticated)
    {button1.visible = true;}
    }
    非要动态加载一个,事件处理就比较麻烦了。
      

  8.   

    还有一个问题:如果我直接在Page上添加控件,则会出现错误:
    在客户端将‘runat=server’加入:<Form method="POST" runat=server>
      

  9.   

    Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            Dim bt As Button
            Dim I As Int16
            For I = 1 To 3
                bt = New Button()
                bt.Text = "test" & I
                bt.ID = "bt" & I
                AddHandler bt.Click, AddressOf bt_click
                Me.Panel1.Controls.Add(bt)
            Next
        End Sub    Private Sub bt_click(ByVal sender As System.Object, ByVal e As System.EventArgs)
            CType(sender, Button).Text = "ok"
        End Sub
    <body MS_POSITIONING="GridLayout">
    <form id="Form1" method="post" runat="server">
    <FONT face="宋体">
    <asp:Panel id="Panel1" style="Z-INDEX: 101; LEFT: 44px; POSITION: absolute; TOP: 59px" runat="server" Width="179px"></asp:Panel>
    </form>
    </FONT>
    </body>
      

  10.   

    如果我是按了一个按钮后动态生成的按钮呢,比如 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
          dim btn as new Button
          btn.text="确定"
          AddHandler btn.Click,addressOf btn_click
     End SubSub btn_click(ByVal sender As System.Object, ByVal e As System.EventArgs)
       response.write("hello")
    End Sub
    这样在点击了Button1后,会生成一个新的按钮btn,但是如果点击btn,那在触发btn_click事件之前就已经传到服务器了,然后页面重新刷新,btn这个按钮也没有了,更别说执行事件了.
    有什么办法可以执行这个btn_click啊?