asp.net добавить функцию динамического нажатия кнопки ссылки

#c# #html #asp.net

#c# #HTML #asp.net

Вопрос:

Я пытаюсь динамически добавить кнопку ссылки

Это 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");
    }
  

Когда я запускаю код, он показывает мне список LinkButton, но когда я нажимаю на него, ничего не происходит.

Ответ №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>");
    }
  

Комментарии:

1. хорошо, при вызове функции DynamicButton я отправляю также словарь, когда я помещаю словарь статическим, это решает проблему

Ответ №2:

Ваш код в порядке .. он работает, как ожидалось .. Но измените эту строку

 this.form1.Controls.Add(lb);
  

Для

 this.Controls.Add(lb);
  

Примечание: Это обратная отправка на ваш сервер, а не событие на стороне клиента

Ответ №3:

Поскольку вы используете CommandName и CommandArgument в LinkButton, вы должны делегировать 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);

И это не ясно из вашего вопроса, но вы должны создавать эту кнопку каждый раз при загрузке страницы, и это включает обратную передачу.

Ответ №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, то это работает.

Комментарии:

1. на самом деле я создаю эту кнопку ссылки в событии OnClick

2. Вы создаете linkbutton динамически, и он добавляется при нажатии на любую кнопку, но при нажатии на кнопку вы автоматически создаете кнопку. Запускает событие обратной передачи, и после обратной передачи элемент управления удаляется со страницы. Итак, вы должны снова добавить элемент управления в «page_load»