Domanda

Ho una pagina ASP.NET con un controllo gridview su di essa con una colonna CommandButton con cancella e seleziona i comandi attivi.

Premendo il tasto Invio si attiva il primo pulsante di comando nella visualizzazione griglia, che elimina una riga. Non voglio che questo accada. Posso modificare il controllo gridview in modo che non reagisca più alla pressione del tasto Invio?

Sullo schermo sono presenti anche una casella di testo e un pulsante. Non è necessario che siano sensibili al tasto Invio, ma devi essere in grado di compilare la casella di testo. Attualmente pop-up una finestra di dialogo di conferma per evitare cancellazioni accidentali, ma abbiamo bisogno di qualcosa di meglio di questo.

Questo è il markup per gridview, come puoi vedere è all'interno di un pannello di aggiornamento asp.net (ho dimenticato di menzionarlo, scusami): (ho lasciato fuori la maggior parte delle colonne e la formattazione)

<asp:UpdatePanel ID="upContent" runat="server" UpdateMode="Conditional">
        <Triggers>
            <asp:AsyncPostBackTrigger ControlID="btnFilter" />
            <asp:AsyncPostBackTrigger ControlID="btnEdit" EventName="Click" />
        </Triggers>
        <ContentTemplate>
            <div id="CodeGrid" class="Grid">
                <asp:GridView   ID="dgCode" runat="server">
                    <Columns>
                        <asp:CommandField SelectImageUrl="~/Images/Select.GIF"
                                            ShowSelectButton="True"
                                            ButtonType="Image"
                                            CancelText=""
                                            EditText=""
                                            InsertText=""
                                            NewText=""
                                            UpdateText=""
                                            DeleteImageUrl="~/Images/Delete.GIF"
                                            ShowDeleteButton="True" />
                        <asp:BoundField DataField="Id"  HeaderText="ID" Visible="False" />
                    </Columns>
                </asp:GridView>
            </div>
        </ContentTemplate>
    </asp:UpdatePanel>
È stato utile?

Soluzione

Questa soluzione sta bloccando la chiave di invio sull'intera pagina

Disabilita la chiave di invio

Altri suggerimenti

Di tanto in tanto ricevo anche problemi sciocchi come questo ... ma di solito implemento solo un trucco rapido e vado avanti :)

myGridView.Attributes.Add("onkeydown", "if(event.keyCode==13)return false;");

Qualcosa del genere dovrebbe funzionare.

Nell'evento PreRender è possibile attivare / disattivare

Private Sub gvSerials_PreRender(ByVal sender As Object, ByVal e As System.EventArgs) Handles gvSerials.PreRender
    If gvSerials.EditIndex < 0 'READ ONLY MODE
        'Enables the form submit during Read mode on my 'search' submit button
        Me.bnSearch.UseSubmitBehavior = True
    Else 'EDIT MODE
        'disables the form submit during edit mode, this allows the APPLY/Update button to be activated after Enter Key is pressed (which really is creating a form submit)
        Me.bnSearch.UseSubmitBehavior = False
    End If

In Page_Load, imposta lo stato attivo sulla casella di testo.

Ecco un buon jQuery per farlo. Questa funzione aggiungerà automagicamente il gestore eventi keydown a tutti i TextBox nella pagina. Utilizzando diversi selettori, puoi controllarlo a livelli più o meno granulari:

//jQuery document ready function – fires when document structure loads
$(document).ready(function() {

   //Find all input controls of type text and bind the given
   //function to them
   $(":text").keydown(function(e) {
      if (e.keyCode == 13) {
          return false;
       }
   });

});

Questo farà sì che tutte le caselle di testo ignorino il tasto Invio e ha il vantaggio di essere automaticamente applicate a qualsiasi nuovo controllo HTML o ASP.Net che potresti aggiungere alla pagina (o che potrebbe essere generato da ASP.Net).

Per chiunque abbia lo stesso problema in cui questo codice non impedisce l'attivazione dell'evento, ha funzionato per me:

if (window.event.keyCode == 13) {    
    event.returnValue=false;     
    event.cancel = true;
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top