Voglio impedire ad ASP.NET GridView di reagire al pulsante di invio
-
02-07-2019 - |
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>
Soluzione
Questa soluzione sta bloccando la chiave di invio sull'intera pagina
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;
}