Я тестирую два элемента управления ImageButton, один из которых программно устанавливается внутри функции GridView_RowDataBound
, а другой жестко задан на стороне клиента следующим образом:
Static ImageButton (работает и запускает ImageButton_Click):
<asp:ImageButton OnClick="ImageButton_Click" runat="server" ID="Foo" ImageUrl="images/edit-icon.png" />
Dynamic ImageButton (не работает, не запускает ImageButton_Click):
protected void gv_RowDataBound(object sender, GridViewRowEventArgs e)
{
.
.
.
ImageButton i = new ImageButton();
i.ImageUrl = "/images/edit-icon.png";
i.ID = "icon_" + testID.ToString();
i.ToolTip = "Click to add a new comment";
i.Click += new ImageClickEventHandler(ImageButton_Click);
e.Row.Cells[5].Controls.Add(i);
.
.
.
}
Dynamic ImageButton рендерится следующим образом
<input type="image" name="GridView1$ctl24$DGV1$ctl02$icon_1234" id="GridView1_ctl24_DGV1_ctl02icon_1234" title="Click to add a new comment" src="/images/edit-icon.png" onclick="ImageButton_Click;WebForm_DoPostBackWithOptions(new WebForm_PostBackOptions("GridView1$ctl24$DGV1$ctl02$icon_1234", "", true, "", "", false, false))" style="border-width:0px;">
Я замечаюКнопка динамического изображения содержит «onclick» против статической кнопки «image», которая имеет «OnClick», не уверен, что это имеет значение.Я был озадачен этим последние несколько часов, я не знаю, почему динамическая кнопка ImageButton не запускается.Пожалуйста, помогите.
ОБНОВЛЕНИЕ:
Спасибо за все отзывы, мне нужно только обработать идентификатор ImageButton, и он не должен быть на стороне сервера.В любом случае я могу сделать это со стороны клиента, используя JavaScript, чтобы избежать обратной передачи?Я попытался переконфигурировать ImageButton следующим образом:
ImageButton i = new ImageButton();
i.ImageUrl = "/images/edit-icon.png";
i.ID = "icon_" + testID.ToString();
i.ToolTip = "Click to add a new comment";
i.OnClientClick = "submitComment(i.ID);return false;";
e.Row.Cells[5].Controls.Add(i);
Я указываю эту функцию в заголовке моей веб-формы
<head runat="server">
<script type="text/javascript">
submitComment(i.ID){
//Call WebMethod and pass comment along with this button's testID
}
</script>
</head>
Но я получаю следующую ошибку, когда нажимаю на правку-icon ImageBtn:
Uncaught Reference Error: icon_12345 is not defined.
Как это так?Если значки редактирования уже отрисованы, и я просто использую Javascript на стороне клиента, разве они не должны быть уже определены и иметь возможность правильно ссылаться на них?Это кажется мне очень противоречивым.Я что-то здесь упускаю?Есть ли какой-то другой элемент управления, кроме ImageButton, который я могу использовать для рендеринга изображения, не беспокоясь о обратной передаче, но который все еще может вызывать Javascript и передавать его идентификатор?Как насчет использования обычного элемента управления Image и простого подключения его свойства onclick для вызова функции submitComment.