Pregunta

Tengo una página ASP.NET con un control de vista de cuadrícula con una columna CommandButton con los comandos de eliminar y seleccionar activos.

Al presionar la tecla Intro, se activa el primer botón de comando en la vista de cuadrícula, que elimina una fila. No quiero que esto suceda. ¿Puedo cambiar el control de vista de cuadrícula de manera que ya no reaccione al presionar la tecla enter?

También hay un cuadro de texto y un botón en la pantalla. No necesitan ser receptivos para pulsar Intro, pero debes poder completar el cuadro de texto. Actualmente, aparece un cuadro de diálogo de confirmación para evitar eliminaciones accidentales, pero necesitamos algo mejor que esto.

Este es el marcado para la vista de cuadrícula, como se puede ver dentro de un panel de actualización de asp.net (olvidé mencionar eso, lo siento): (omití la mayoría de las columnas y el formato)

<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>
¿Fue útil?

Solución

Esta solución está bloqueando la tecla enter en toda la página

Desactive la tecla de entrada

Otros consejos

De vez en cuando también me salen problemas tontos como este ... pero, por lo general, solo implemento un pirateo rápido y sigo adelante.

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

Algo así debería funcionar.

En el evento PreRender puedes alternar

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

En Page_Load, establece el foco en el cuadro de texto.

Aquí hay una buena forma de jQuery . Esta función agregará automáticamente el controlador de eventos keydown a todos los TextBoxes en la página. Al utilizar diferentes selectores, puede controlarlo a niveles más o menos granulares:

//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;
       }
   });

});

Esto hará que todos los cuadros de texto ignoren la tecla Intro y tiene la ventaja de que se aplica automáticamente a cualquier nuevo control HTML o ASP.Net que pueda agregar a la página (o que pueda ser generado por ASP.Net).

Para cualquier otra persona que tenga el mismo problema donde este código no impide que se active el evento, esto funcionó para mí:

if (window.event.keyCode == 13) {    
    event.returnValue=false;     
    event.cancel = true;
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top