ca88yzc 13

点击三遍铵钮爆发八个新文本框ca88yzc,动态创立按键及管理OnClick事件

Posted by

有用户反馈,看过Insus.NET实现文章标题被变更后如何进行同步之后,对于用户点击按钮,如何能动态添加用户控件,希望能得到更详细一些讲解与说明。有一点需要注意的地方,就是这个用户控件,需要放在网页指定的位置上,因为使用了一个PlaceHolder来装载。

最普通的动态创建铵钮方法,并为此铵钮处理它的OnClick的事件。为了演示效果更佳,在aspx使用Ajax,

参考前一篇, 没有达到用户的要求,用户要求是每点击一次添加铵钮,产生一个新的文本框TextBox,在文本框输入一些值之后,点击获取文本框值的铵钮,能取得刚才在文本框的值。首先看看修改之后的效果:

xxx.aspx: 

ca88yzc 1ca88yzc 2View Code

 

 转载地址:<asp:TextBox ID=”txtUrl” runat=”server”></asp:TextBox>
        <asp:Button ID=”CopyArticle” runat=”server” Text=”转载” OnClick=”CopyArticle_Click” /><br />
        <asp:PlaceHolder ID=”PlaceHolder1″ runat=”server”></asp:PlaceHolder>

<asp:ScriptManager ID=”ScriptManager1″ runat=”server”>
    </asp:ScriptManager>
    <asp:UpdatePanel ID=”UpdatePanel1″ runat=”server”>
        <ContentTemplate>
            <asp:PlaceHolder ID=”PlaceHolder1″ runat=”server”></asp:PlaceHolder>
        </ContentTemplate>
    </asp:UpdatePanel>

ca88yzc 3

  

 

 

xxx.aspx.cs 按钮事件:

.aspx.cs,程序中有详注释:

xxx.aspx:在网页中,拉一个动态添加文本框装载的容器PlaceHolder,和两个铵钮,一个是添加,另一个是获取值。

protected void CopyArticle_Click(object sender, EventArgs e)
    {
        CopiedArticle ca = (CopiedArticle)this.LoadControl(“~/CopiedArticle.ascx”);
        ca.Url = this.txtUrl.Text.Trim();

ca88yzc 4ca88yzc 5View Code

ca88yzc 6ca88yzc 7View Code

       this.PlaceHolder1.Controls.Add(ca);
    }

 protected void Page_Load(object sender, EventArgs e)
    {
        GenerateButton();
    }

 <asp:PlaceHolder ID=”PlaceHolder1″ runat=”server”></asp:PlaceHolder>
            <br />
            <asp:Button ID=”ButtonAdd” runat=”server” Text=”Add TextBox”  OnClick=”ButtonAdd_Click” />
            <asp:Button ID=”ButtonGetValue” runat=”server” Text=”GetTextValue” OnClick=”ButtonGetValue_Click” />

 

    private void GenerateButton()
    {
        //new 一个Button控件。
        Button button = new Button();

 

执行结果:

        //为此button控件添加属性ID和ID的值为Button1。
        button.Attributes.Add(“ID”, “Button1”);

为了记录添加的次数,我们需要写一个属性,记得点击次数。

ca88yzc 8

        //为此button控件添加属性,设button为服务器控件。
        button.Attributes.Add(“runat”, “server”);

ca88yzc 9ca88yzc 10TotalControls

 

        //使用Text属性来指定或确定在Button控件中显示的标题
        button.Text = “Click me”;

 protected int TotalControls
    {
        get 
        {
            return ViewState[“TotControls”] == null ? 0 : (int)(ViewState[“TotControls”]); 
        }
        set 
        { 
            ViewState[“TotControls”] = value; 
        }
    }

        //为button控件添加Click事件。
        button.Click += new EventHandler(this.Button1_Click);

 

        //把button控件load到aspx的PlaceHolder控件里。
        this.PlaceHolder1.Controls.Add(button);
    }

写一个方法,动态产生文本框,方法有一个参数,就是传入将要产生的次数。

    //实现Button1_Click事件
    private void Button1_Click(object sender, EventArgs e)
    {
        Insus.NET.InsusJsUtility js = new Insus.NET.InsusJsUtility();
        js.JsAlert(“‘Click me’ 铵钮被点击,事件已经产生。”);
    }

ca88yzc 11ca88yzc 12View Code

网页在运行时,会显示一个Click me的铵钮,点击铵钮后:

 private void DymanicallyGenerateTextBoxControl(int totalControls)
    {
        TextBox tb = new TextBox();
        tb.ID = “TextBox” + totalControls;
        this.PlaceHolder1.Controls.Add(tb);
    }

 ca88yzc 13

 

 

网页一加载时,Page_Load事件中,判断计数器为多少,循环产生文本框。

 于2013-05-29
14:00补充以下VB.NET代码:

ca88yzc 14ca88yzc 15View Code

ca88yzc 16ca88yzc 17

 protected void Page_Load(object sender, EventArgs e)
    {
        for (int i = 0; i < TotalControls; i++)
        {
            DymanicallyGenerateTextBoxControl(i + 1);
        }       
    }

Protected Sub Page_Load(sender As Object, e As EventArgs) Handles Me.Load
        GenerateButton()
    End Sub

    Private Sub GenerateButton()
        'new 一个Button控件。
        Dim button As New Button()

        '为此button控件添加属性ID和ID的值为Button1。
        button.Attributes.Add("ID", "Button1")

        '为此button控件添加属性,设button为服务器控件。
        button.Attributes.Add("runat", "server")

        '使用Text属性来指定或确定在Button控件中显示的标题
        button.Text = "Click me"

        '为button控件添加Click事件。
        AddHandler button.Click, AddressOf Me.Button1_Click

        '把button控件load到aspx的PlaceHolder控件里。
        Me.PlaceHolder1.Controls.Add(button)

    End Sub

    '实现Button1_Click事件
    Private Sub Button1_Click(sender As Object, e As EventArgs)
        Dim js As New Insus.NET.InsusJsUtility()
        js.JsAlert("'Click me' 铵钮被点击,事件已经产生。")
    End Sub

 

View Code

Click事件:

 

ca88yzc 18ca88yzc 19View Code

 protected void ButtonAdd_Click(object sender, EventArgs e)
    {
        TotalControls = TotalControls + 1;
        DymanicallyGenerateTextBoxControl(TotalControls);
    }

 

最后是获取文本框值的铵钮Click事件:

ca88yzc 20ca88yzc 21View Code

 protected void ButtonGetValue_Click(object sender, EventArgs e)
    {
        foreach (Control ctl in this.PlaceHolder1.Controls)
        {
            if (ctl is TextBox)
                Response.Write(((TextBox)ctl).Text.Trim () + “<br/>”);
        }
    }

 

相关文章

Leave a Reply

电子邮件地址不会被公开。 必填项已用*标注