Разница в OnClick для ImageButton внутри GridView и обычного ImageButton - PullRequest
0 голосов
/ 24 июня 2011

Я работаю над проектом ASP.NET/C# и у меня есть элемент управления GridView.Одним из столбцов является TemplateField / ItemTemplate с ImageButton внутри.Во время события OnClick я делаю панель видимой.Когда вы делаете это с обычным ImageButton, страница перезагружается и панель видна.Этого не происходит с моим ImageButton внутри GridView.Кто-нибудь знает, как я могу это сделать, или почему это так?

Спасибо за ваше время, пожалуйста, дайте мне знать, если у вас есть какие-либо вопросы.

Вот соответствующее определение asp

<asp:TemplateField ItemStyle-Width="90px"  ItemStyle-VerticalAlign ="Bottom" ItemStyle-HorizontalAlign ="Center" HeaderText="Add Alias">
                <HeaderStyle Font-Bold="True" Font-Size="11px" VerticalAlign="Bottom"/>
                    <ItemTemplate>
                        <asp:ImageButton ID ="btnAddAliasHeader" runat="server" ImageUrl="~/img/AddAlias.gif" onclick="btnAddAlias_Click" />
                 </ItemTemplate>
                </asp:TemplateField>

А вот C # для функции OnClick.

protected void btnAddAlias_Click(object sender, EventArgs e)
{
    ImageButton btnAddAlias = (ImageButton)sender;
    GridViewRow row = (GridViewRow)btnAddAlias.Parent.Parent;
    int rowIndex = row.RowIndex;

    lblSelectedCity.Text = gvResults.Rows[rowIndex].Cells[0].Text;
    lblSelectedCountry.Text = ddlCountry.Text;
    pnlAddAlias.Visible = true;

}

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

Редактировать: Яидиот и не учел, что все это происходит в панели обновления.

Ответы [ 5 ]

1 голос
/ 24 июня 2011

Button s, ImageButton s и LinkButton s не запускают события Click, когда они находятся в шаблоне управления, как вы описали.(Изменить: если не используется со свойством OnClick элемента управления) Вместо этого содержащий элемент управления запускает событие, в случае GridView это событие RowCommand.Используйте свойства CommandName и CommandArgument вашей кнопки, чтобы определить правильное действие в обработчике событий, как показано ниже:

Разметка:

<asp:LinkButton ID="LinkButton1" runat="server" CommandName="DoStuff" CommandArgument='<%# Eval("RecordID") %>' Text="DoStuff"></asp:LinkButton>

Код:

Protected Sub GridView1_RowCommand(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewCommandEventArgs) Handles GridView1.RowCommand
    If e.CommandName = "DoStuff" Then
        'Do something with e.CommandArgument'
    End If
End Sub
0 голосов
/ 16 сентября 2014

Вы можете использовать Oncommand Event для gridview, вместо того, чтобы использовать Onclick для перкулярного элемента управления, только вы должны передать имя команды из элемента управления и проверить его по e.commandname и делать то, что вы хотите выполнить

0 голосов
/ 24 июня 2011

Полагаю, ваше событие не запускается - вы должны использовать атрибут имени команды в кнопке изображения - и выбрать его в onrowcommand вида сетки - или зарегистрировать событие нажатия кнопки image в событии onrowcreated.

0 голосов
/ 24 июня 2011

Если постбэк не нужен. Извините, если я неправильно понял вопрос. Вместо кнопки изображения (серверный элемент управления) можно использовать ссылку или обычное изображение, заключенное в тег и jQuery. Это предотвратит обратную передачу на сервер. Надеюсь, это поможет.

<a href="#" id="viewPanel">Click to View Panel</a>

$("#<%=viewPanel.ClientID%>").click(function(e)
{
    e.preventDefault();
    $("#id_of_panel").show();

});

Надеюсь, это поможет.

0 голосов
/ 24 июня 2011

Кнопки / кнопки изображений внутри контейнера, такие как просмотр сетки (просмотр списка, повторитель и т. Д.), Имеют событие щелчка, связанное с самим контейнером.Чтобы сделать панель видимой, вам нужно использовать имя команды и свойства аргумента команды на кнопке, а затем использовать событие OnRowCommand вида сетки для отображения панели

HTH

...