#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»