Я хочу, чтобы ASP.NET GridView не реагировал на кнопку ввода

StackOverflow https://stackoverflow.com/questions/152099

  •  02-07-2019
  •  | 
  •  

Вопрос

У меня есть страница ASP.NET с элементом управления GridView со столбцом CommandButton с активными командами удаления и выбора.

Нажатие клавиши ввода вызывает срабатывание первой командной кнопки в представлении сетки, которая удаляет строку.Я не хочу, чтобы это произошло.Могу ли я изменить элемент управления GridView таким образом, чтобы он больше не реагировал на нажатие клавиши ввода?

На экране также есть текстовое поле и кнопка.Им не обязательно реагировать на нажатие клавиши Enter, но вы должны иметь возможность заполнить текстовое поле.В настоящее время мы открываем диалоговое окно подтверждения, чтобы предотвратить случайное удаление, но нам нужно что-то получше.

Это разметка для GridView, как вы можете видеть, она находится внутри панели обновлений asp.net (я забыл упомянуть об этом, извините):(Я пропустил большинство столбцов и форматирование)

<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>
Это было полезно?

Решение

Это решение блокирует клавишу ввода на всей странице.

Отключить клавишу ввода

Другие советы

У меня тоже время от времени возникают такие дурацкие вопросы...но обычно я просто реализую быстрый хак и иду дальше :)

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

Что-то вроде этого должно сработать.

В событии PreRender вы можете переключить

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

В Page_Load установите фокус на текстовое поле.

Вот хороший jQuery способ сделать это.Эта функция автоматически добавит обработчик события нажатия клавиши во все текстовые поля на странице.Используя различные селекторы, вы можете управлять им на более или менее детальном уровне:

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

});

Это заставит все текстовые поля игнорировать клавишу Enter и будет автоматически применяться к любым новым элементам управления HTML или ASP.Net, которые вы можете добавить на страницу (или которые могут быть созданы ASP.Net).

Для всех, у кого такая же проблема, когда этот код не предотвращает запуск события, у меня это сработало:

if (window.event.keyCode == 13) {    
    event.returnValue=false;     
    event.cancel = true;
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top