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

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

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

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

Это разметка для 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>

person stombeur    schedule 30.09.2008    source источник
comment
Я не могу воспроизвести это, что наводит меня на мысль, что есть что-то за пределами Gridview, заставляющее кнопку удаления реагировать на клавишу Enter. У вас есть дополнительный JavaScript в форме? Если бы вы могли опубликовать свою разметку, это тоже было бы полезно.   -  person dbugger    schedule 03.10.2008


Ответы (6)


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

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

person Community    schedule 31.10.2008

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

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

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

person Timothy Khouri    schedule 24.10.2008
comment
Onkeydown работает одинаково во всех браузерах для общих элементов ввода? Кто-то здесь сказал использовать onkeyup из-за какой-то причуды Firefox. - person CMPalmer; 24.10.2008
comment
У меня никогда не было проблем с onkeydown ... и этот код работает в IE, FF, Opera и Safari с тех пор, как я последний раз проверял (около года назад). - person Timothy Khouri; 24.10.2008
comment
это не работает для меня. Событие onkeydown отображается правильно (оно присутствует, когда я проверяю источник представления), но не предотвращает запуск события. - person stombeur; 29.10.2008

В событии 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
person Derrick    schedule 29.09.2011

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

person devio    schedule 23.10.2008

Вот хороший способ сделать это с помощью 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).

person CMPalmer    schedule 24.10.2008

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

if (window.event.keyCode == 13) {    
    event.returnValue=false;     
    event.cancel = true;
}
person Heather    schedule 27.04.2010