【问题标题】:asp.net add link button dynamically click functionasp.net添加链接按钮动态点击功能
【发布时间】:2016-10-22 18:07:35
【问题描述】:

我正在尝试动态添加 LinkBut​​ton

这是html代码:

         <div id="resultDivText" runat="server">
            <asp:PlaceHolder ID="PlaceHolder1" runat="server">

            </asp:PlaceHolder>
        </div>

这是c#代码

            LinkButton lb = new LinkButton();
            lb.Text = songName + "</br>"; //LinkButton Text
            lb.ID = song.Key.ToString(); // LinkButton ID’s
            lb.CommandArgument = Convert.ToString(song.Key); 
            lb.CommandName = Convert.ToString(song.Key); 
            lb.Click += new EventHandler(test_Click);                      
            this.form1.Controls.Add(lb);
            PlaceHolder1.Controls.Add(lb);

这就是“test_Click”函数

    protected void test_Click(object sender, EventArgs e)
    {
        showAllSong("let it be");
    }

当我运行代码时,它会显示链接按钮列表,但是当我点击它时,什么也没有发生。

【问题讨论】:

    标签: c# html asp.net


    【解决方案1】:

    试试这个代码..

        static bool enable = false;
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                DynamicButton();
            }
            else if (enable)
            {
                DynamicButton();
            }
        }
        protected void btnBindMapping_Click(object sender, EventArgs e)
        {
            enable = true;
            DynamicButton();
        }
        protected void DynamicButton()
        {
            LinkButton lb = new LinkButton();
            lb = new LinkButton();
            lb.Text = songName + "</br>"; //LinkButton Text
            lb.ID = song.Key.ToString(); // LinkButton ID’s
            lb.CommandArgument = Convert.ToString(song.Key);
            lb.CommandName = Convert.ToString(song.Key);
            lb.Click += new EventHandler(test_Click);
            this.form1.Controls.Add(lb);
            PlaceHolder1.Controls.Add(lb);
        }
        protected void test_Click(object sender, EventArgs e)
        {
            Response.Write("<script>alert('done'); </script>");
        }
    

    【讨论】:

    • 好的,当调用 DynamicButton 函数时,我还发送一个字典,当我把字典放在静态时它解决了问题
    【解决方案2】:

    你的代码很好..它按预期工作..但是改变这一行

    this.form1.Controls.Add(lb);
    

    this.Controls.Add(lb);
    

    注意:它回发到您的服务器而不是客户端事件

    【讨论】:

      【解决方案3】:

      由于您在 LinkBut​​ton 中使用 CommandNameCommandArgument,因此您必须委托 Command 而不是 Click

      lb.Command += new CommandEventHandler(test_Click);
      
      protected void test_Click(object sender, CommandEventArgs e)
      {
          Response.Write(e.CommandArgument + "<br>" + e.CommandName);
      }
      

      并删除this.form1.Controls.Add(lb);这一行

      您的问题并不清楚,但您必须在每次加载页面时创建该按钮,其中包括 PostBack。

      【讨论】:

        【解决方案4】:

        详细说明你没有提到。创建此动态按钮时。

        因为这可能会产生问题。

        如果您在页面加载事件中调用您的 c# 代码,那么它可以工作。

                LinkButton lb = new LinkButton();
                lb = new LinkButton();
                lb.Text = songName + "</br>"; //LinkButton Text
                lb.ID = song.Key.ToString(); // LinkButton ID’s
                lb.CommandArgument = Convert.ToString(song.Key); 
                lb.CommandName = Convert.ToString(song.Key); 
                lb.Click += new EventHandler(test_Click);                      
                this.form1.Controls.Add(lb);
                PlaceHolder1.Controls.Add(lb);
        

        如果该按钮在 oninit 或 onload 事件上动态创建,则它可以工作。

        【讨论】:

        • 我实际上是在 OnClick 事件上创建此链接按钮
        • 您正在动态创建链接按钮,当您单击任何按钮时它正在添加,但是当您单击时,您会动态创建按钮。它触发一个回发事件,并在回发后从页面中删除控件。所以,你必须再次在“page_load”中添加控件
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-05-28
        • 1970-01-01
        • 1970-01-01
        • 2016-07-17
        相关资源
        最近更新 更多