Панель Modalpopupextender в виде сетки

у меня проблема. Следуйте исходному коду

      <asp:GridView ID="gvMonitor" runat="server" AutoGenerateColumns="False" DataKeyNames="ticket_id"
                    DataSourceID="dsTicket" AllowPaging="True" AllowSorting="True" CellPadding="8"
                    ForeColor="#333333" GridLines="None">
                    <AlternatingRowStyle BackColor="White" ForeColor="#284775" />
                    <Columns>
                        <asp:CommandField ShowSelectButton="True" />
                        <asp:TemplateField>
                            <ItemTemplate>
                                <asp:ImageButton runat="server" ID="btnCambiaStato" ImageUrl="/images/status.png"
                                    ToolTip="Cambia stato ticket" Height="24px" CommandName="CambiaStato" Width="24px" />
                                &nbsp;
                                <asp:ImageButton runat="server" ID="ImageButton2" ImageUrl="/images/icon_history.jpg"
                                    ToolTip="Storico ticket" Height="24px" CommandName="StoriaTicket" Width="24px" />
                                <asp:ModalPopupExtender ID="mpeCambiaStato" runat="server" TargetControlID="btnCambiaStato"
                                    PopupControlID="panelCambiaStatoTicket" BackgroundCssClass="modalBackground"
                                    DropShadow="true" OkControlID="btnConfermaCambioStato" OnOkScript="onOk()" CancelControlID="btnCancellaCambioStato" />
                                <asp:Panel runat="server" ID="panelCambiaStatoTicket" Style="background-color: White;
                                    padding: 10px 10px 10px 10px; border-color: Black; border-width: 1px; border-style: solid;">
                                    Seleziona il nuovo stato del Ticket &nbsp;
                                    <asp:DropDownList runat="server" ID="cmbStatoTicket">
                                        <asp:ListItem Text="Aperto" Value="A"></asp:ListItem>
                                        <asp:ListItem Text="Chiuso" Value="C"></asp:ListItem>
                                    </asp:DropDownList>
                                    <br />
                                    <br />
                                    Inserisci una nota di avanzamento (opzionale)
                                    <br />
                                    <asp:TextBox runat="server" ID="txtNotaAvanzamento" TextMode="MultiLine" Text=""
                                        Height="60px" Width="240px"></asp:TextBox>
                                    <br />
                                    <asp:Button runat="server" ID="btnConfermaCambioStato" Text="Conferma" />
                                    &nbsp;
                                    <asp:Button runat="server" ID="btnCancellaCambioStato" Text="Cancella" />
                                </asp:Panel>
                            </ItemTemplate>
                        </asp:TemplateField>
                        <asp:BoundField DataField="ticket_id" HeaderText="Nr Ticket" InsertVisible="False"
                            ReadOnly="True" SortExpression="ticket_id" />

Проблема в том, что когда я нажимаю btnConfermaCambioStato, asp.net не поднимается

Private Sub gvMonitor_RowCommand(sender As Object, e As System.Web.UI.WebControls.GridViewCommandEventArgs) Обрабатывает gvMonitor.RowCommand If (e.CommandName = "CambiaStato") Then

Почему ? Спасибо


person stighy    schedule 08.04.2011    source источник


Ответы (1)


Во-первых, это потому, что в кнопке btnConfermaCambioStato нет CommandName.

Когда вы нажимаете на btnCambiaStato, gvMonitor_RowCommand должен быть поднят, но он поглощается ModalPopupExtender, чтобы он мог отображать всплывающее окно на стороне клиента без обратной отправки. но в данном случае это совместно, потому что вы не хотите выполнять обратную передачу, пока действие не будет подтверждено.

Если вы хотите вызвать событие при нажатии на btnConfermaCambioStato, вам следует добавить CommandName к кнопке, которая запускает событие.

<asp:Button runat="server" ID="btnConfermaCambioStato" 
            Text="Conferma"
            CommandName="ConfermaCambiaStato" />

Но это также не сработает, потому что вы указали, что это OkControl ModalPopupExtender, это говорит ModalPopupExtender поглотить событие и обработать его на стороне клиента, запустив функцию onOk() javascript.

OkControlID="btnConfermaCambioStato" OnOkScript="onOk()"

Итак, вы, вероятно, захотите удалить эти 2 свойства, чтобы вы могли обрабатывать событие щелчка btnConfermaCambioStato на стороне сервера, используя событие gvMonitor_RowCommand. Этот ответ на вопрос «Почему?»

Но я думаю, что зная это, вы не избежите неприятностей. В зависимости от того, что вы хотите сделать, в gvMonitor_RowCommand вы, вероятно, установили свой gridview как asyncpostbacktrigger панели обновлений, чтобы справляться с этим гладко, затем вы могли бы скрыть ModalPopupExtender на стороне сервера, а затем обновить все, что вам нужно, на этой панели обновлений. . Но я здесь только размышляю.

person DavRob60    schedule 13.04.2011