#c# #asp.net #visual-studio #event-handling #linkbutton
#c# #asp.net #visual-studio #обработка событий #кнопка linkbutton
Вопрос:
В моем приложении веб-части sharepoint. Я динамически генерирую кнопки ссылок, как показано ниже. и это работает нормально
foreach (var pName in productTypesNames[productType] )
{
var subLi = new HtmlGenericControl("li");
var linkButton = new LinkButton{ Text = pName };
linkButton.Click = new EventHandler(linkButton_Click);
subLi.Controls.Add(linkButton);
ul.Controls.Add(subLi);
}
Однако, когда я нажимаю на одну из ссылок в пользовательском интерфейсе, мой отладчик никогда не достигает точки останова, установленной в самой первой строке
void linkButton_Click(object sender, EventArgs e)
{
}
Больше кода
protected void StateClicked(object sender, CommandEventArgs e)
{
//Generate a dictionary of type Dictionary<string, List<string>>
//Display the dictionary
foreach (var productType in productTypesNames.Keys)
{
var li = new HtmlGenericControl("li");
nav.Controls.Add(li);
var ul = new HtmlGenericControl("ul");
var anchor = new HtmlGenericControl("a");
anchor.Attributes.Add("href", "#");
foreach (var pName in productTypesNames[productType] )
{
var subLi = new HtmlGenericControl("li");
var linkButton = new LinkButton{ Text = pName };
linkButton.Click = new EventHandler(linkButton_Click);
subLi.Controls.Add(linkButton);
ul.Controls.Add(subLi);
}
anchor.InnerHtml = productType;
li.Controls.Add(anchor);
li.Controls.Add(ul);
}
}
Где stateClicked вызывается щелчком мыши на изображении карты США.
Комментарии:
1. Для этого может быть несколько причин, требуется больше кода, наиболее вероятными причинами могут быть AutoEventWireup=»false» или отсутствие runat=»Server» на кнопках LinkButtons.
2. Я добавил следующий код, и он мне все еще не нравится:-(
3. Кнопка LinkButton. Атрибуты. Добавить(«runat», «server»); Кнопка LinkButton. Атрибуты. Добавить(«AutoEventWireup», «true»); Кнопка LinkButton. Атрибуты. Добавить(«AutoPostBack», «true»); LinkButton.Click = новый обработчик событий(linkButton_Click);
4. Также это приложение веб-части Sharepoint
5. Убедитесь, что ваши элементы управления воссоздаются при каждой обратной передаче, иначе событие не будет подключено должным образом. Если вы создаете эти элементы управления только с помощью onclick, убедитесь, что вы воссоздали их где-то еще, например, page_init
Ответ №1:
Вероятно, вы не воссоздаете динамически генерируемые ссылки при каждой обратной передаче.
Если у вас есть if (!IsPostback)
обернутый вокруг вашего foreach, попробуйте удалить его.
Комментарии:
1. У меня нет if (!IsPostBack), обернутого вокруг моего foreach 🙁
2. Можете ли вы опубликовать больше кода? Он отлично работает, если я скопирую ваш код непосредственно в свой проект. Единственный способ воспроизвести это, если я не буду повторно создавать ссылки при обратной передаче
3. Хорошо, так вызывается ли StateClicked когда-нибудь во время обратной передачи? Вероятно, все еще потребуется больше кода, чтобы полностью решить эту проблему. Также смотрите комментарий @CjCoax относительно AutoEventWireup
4. Да, и нигде нет проверки (!IsPostBack). Я добавил в LinkButton следующие атрибуты. Кнопка LinkButton. Атрибуты. Добавить(«runat», «server»); Кнопка LinkButton. Атрибуты. Добавить(«AutoEventWireup», «true»); Кнопка LinkButton. Атрибуты. Добавить(«AutoPostBack», «true»); LinkButton.Click = новый обработчик событий(linkButton_Click);
Ответ №2:
здесь у меня была та же проблема….
я создавал HtmlTable
после запуска события … в этой таблице (n) HtmlTableRow
s (вычисляется в обработчике событий)
, теперь каждая строка содержит 2 LinkButton
s, которые генерируются из исходного кода .. после обработки события … и каждому LinkButton
присваивается новый обработчик событий:
lnkbtnEdit.CommandArgument = b.BookID.ToString();
lnkbtnEdit.Click = new EventHandler(lnkbtnEdit_Click);
где lnkbtnEdit_Click
подпись выглядит следующим образом:
protected void lnkbtnEdit_Click(object sender, EventArgs e)
странно то, что .. при нажатии сгенерированного происходит обратная LinkButton
передача… но событие не было запущено…
я точно не знаю, в чем была проблема… но я нашел решение: ..
похоже, что эти сгенерированные элементы управления исчезают при обратной передаче (пытался присвоить идентификатор и использовал Page.FindControl()
witch, возвращенный с null !!)
поэтому мне пришлось заново связать кнопки …. на Page_Load я повторно сгенерировал кнопки LinkButtons с тем же идентификатором … и связал их с соответствующими EventHandler
s