ASP.NET: кнопка в пользовательском элементе управления не отправляет ответ - PullRequest
1 голос
/ 23 апреля 2010

У меня есть простой пользовательский элемент управления с этим кодом:

<%@ Control Language="C#" AutoEventWireup="true" CodeFile="Pager.ascx.cs" Inherits="Pager" %>
<table style="width: 100%;">
    <tr>
        <td runat="server" id="PageControls">
            <!-- This button has the problem: -->
            <asp:Button ID="btnPrevPage" runat="server" Text="&larr;" OnClick="btnPrevPage_Click" />
            Page
            <asp:DropDownList runat="server" ID="ddlPage" AutoPostBack="true" OnSelectedIndexChanged="ddlPage_SelectedIndexChanged" />
            of
            <asp:Label ID="lblTotalPages" runat="server" />
            <!-- This button has the problem: -->
            <asp:Button ID="btnNextPage" runat="server" Text="&rarr;" OnClick="btnNextPage_Click" />
        </td>
        <td align="right" runat="server" id="itemsPerPageControls">
            <asp:Literal ID="perPageText1" runat="server" />
            <asp:DropDownList ID="ddlItemsPerPage" runat="server" AutoPostBack="true" OnSelectedIndexChanged="ddlItemsPerPage_SelectedIndexChanged" />
            <asp:Literal ID="perPageText2" runat="server" />
        </td>
    </tr>
</table>

Как вы можете видеть, 2 кнопки подключены к событиям щелчка, которые правильно определены в коде позади.

Теперь вот как я добавляю экземпляр элемента управления на свою страницу:

 <uc:Pager ID="Pager1" runat="server" TotalRecords="100" DisplayItemsPerPage="true"
        ItemsPerPageChoices="10,25,50,100" ItemsPerPageFormatString="Sessions/Page: {0}"
        PageSize="25" OnPageChanged="PageChanged" OnPageSizeChanged="PageChanged" />

Однако я заметил, что две кнопки в моем пользовательском элементе управления не вызывали сообщение назад при нажатии.Однако выпадающий список вызывает обратную передачу.Вот отрендеренный HTML:

<table style="width: 100%;">
    <tr>
        <td id="ctl00_MainContent_Pager1_PageControls" align="left">
            <!-- No onclick event! Why? -->
            <input type="submit" name="ctl00$MainContent$Pager1$btnPrevPage" value="←" id="ctl00_MainContent_Pager1_btnPrevPage" />
            Page
            <select name="ctl00$MainContent$Pager1$ddlPage" onchange="javascript:setTimeout('__doPostBack(\'ctl00$MainContent$Pager1$ddlPage\',\'\')', 0)"
                id="ctl00_MainContent_Pager1_ddlPage">
                <option value="1">1</option>
                <option selected="selected" value="2">2</option>
                <option value="3">3</option>
                <option value="4">4</option>
                <option value="5">5</option>
                <option value="6">6</option>
            </select>
            of <span id="ctl00_MainContent_Pager1_lblTotalPages">6</span>
            <!-- No onclick event! Why? -->
            <input type="submit" name="ctl00$MainContent$Pager1$btnNextPage" value="→" id="ctl00_MainContent_Pager1_btnNextPage" />
        </td>
        <td id="ctl00_MainContent_Pager1_itemsPerPageControls" align="right">
            Sessions/Page:
            <select name="ctl00$MainContent$Pager1$ddlItemsPerPage" onchange="javascript:setTimeout('__doPostBack(\'ctl00$MainContent$Pager1$ddlItemsPerPage\',\'\')', 0)"
                id="ctl00_MainContent_Pager1_ddlItemsPerPage">
                <option value="10">10</option>
                <option selected="selected" value="25">25</option>
                <option value="50">50</option>
                <option value="100">100</option>
            </select>
        </td>
    </tr>
</table>

И, как вы можете видеть, атрибуты onclick не отображаются в элементах ввода кнопки.Почему бы и нет?

РЕДАКТИРОВАТЬ

Ронни, почему ты такой тупой ???<input type="submit" /> не использует JavaScript для отправки формы!

1 Ответ

6 голосов
/ 23 апреля 2010

Клик нет даже на кнопках, потому что они имеют тип ввода = submit и поэтому не требуют javascript, чтобы вызвать обратную передачу.

У вас есть какие-либо панели обновления на вашей странице вообще, которые могут быть причинойпроблема?

Есть ли на странице валидаторы, которые могут остановить обратную передачу?Возможно, вы захотите установить для CausesValidation значение false, если это так.

Вы установили точки останова в Page_Load своей страницы и элемента управления, а не просто в событии Click, чтобы проверить работоспособность.1008 * Вы сделали что-нибудь, связанное с отключением ViewState?

...