События UserControl OnClick никогда не происходят - PullRequest
0 голосов
/ 27 июля 2011

У меня есть веб-проект на C # / asp.net.У меня есть UserControl с GridView, который имеет закодированную кнопку.Кнопка имеет событие OnClick, которое приведет к перенаправлению на другую страницу.В этот момент событие onclick никогда не происходит независимо от того, сколько раз я нажимаю кнопку.Однако, если я жестко закодирую кнопку на странице, которая использует пользовательский элемент управления (с событием в его коде позади), события onclick работают идеально.

Кроме того, когда я перемещаю кнопку за пределы UserControlGridView, работает нормально.Тем не менее, я ограничен в пространстве и мне нужно разместить его на панели пейджера внизу страницы.

<PagerTemplate>
     <table width="100%" cellpadding="0" cellspacing="0">
        <tr>
           <td align="left" valign="middle">
              <asp:Panel cssClass="PagerPanel" runat="server">
                 <asp:Button ID="FirstButton" runat="server" OnClick="FirstButton_Click" Text="|&lt;"  Enabled="<%# (_gridView.PageIndex > 0) %>" />
                 <asp:Button ID="PrevButton" runat="server" OnClick="PrevButton_Click" Text="&lt;" Enabled="<%# (_gridView.PageIndex > 0) %>" />
                 <%# _gridView.PageIndex+1  %> of <%# _gridView.PageCount %>
                 <asp:Button ID="NextButton" runat="server" OnClick="NextButton_Click" Text="&gt;" Enabled="<%# (_gridView.PageIndex < _gridView.PageCount-1) %>" />
                 <asp:Button ID="LastButton" runat="server" OnClick="LastButton_Click" Text="&gt;|" Enabled="<%# (_gridView.PageIndex < _gridView.PageCount-1) %>" />
              </asp:Panel>
           </td>

           <td>
           <asp:Button ID="Button1" OnClick="AddButton_Click" runat="server"       
              Text="Button" />
           </td>
        </tr>
     </table>
  </PagerTemplate>

Код UserControl сзади:

protected void AddButton_Click(object sender, EventArgs e)
{
    Response.Redirect("thisurl...");
}

Не уверен, что ещеЯ могу сделать, чтобы обработать это событие клика.По-видимому, GridView как-то останавливает его запуск.Есть ли в любом случае, что GridView UserControl может иметь кнопку, которая будет обрабатывать события onclick?

Ответы [ 2 ]

2 голосов
/ 27 июля 2011

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

Есть много способов, как это исправить, но я хотел бы изучить использование EnsureChildControls.

http://msdn.microsoft.com/en-us/library/system.web.ui.control.ensurechildcontrols.aspx

1 голос
/ 27 июля 2011

Вы должны добавить атрибут CommandName = "Button" в объявление asp: Button, а затем подключить событие RowCommand GridView.Затем проверьте имя команды (т. Е. If (e.CommandName == "Button") в обработчике события OnRowCommand.

<asp:Button ID="Button1" CommandName="Button" runat="server" Text="Button" />

...

protected void GridView_RowCommand(object sender, GridViewCommandEventArgs e)
{
  if (e.CommandName == "Button")
  {
    ...
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...