أريد منع ASP.NET GridView من التفاعل مع زر الإدخال

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

  •  02-07-2019
  •  | 
  •  

سؤال

لدي صفحة ASP.NET بها عنصر تحكم في طريقة عرض الشبكة مع عمود CommandButton مع أوامر الحذف والتحديد النشطة.

يؤدي الضغط على مفتاح الإدخال إلى تشغيل زر الأمر الأول في عرض الشبكة، مما يؤدي إلى حذف صف.لا أريد أن يحدث هذا.هل يمكنني تغيير عنصر التحكم في عرض الشبكة بطريقة لا تتفاعل بعد الآن مع الضغط على مفتاح الإدخال؟

يوجد أيضًا مربع نص وزر على الشاشة.ليس من الضروري أن تكون مستجيبة للضغط على زر الإدخال، ولكن يجب أن تكون قادرًا على ملء مربع النص.نعرض حاليًا مربع حوار تأكيد منبثقًا لمنع عمليات الحذف غير المقصودة، ولكننا بحاجة إلى شيء أفضل من هذا.

هذا هو ترميز عرض الشبكة، كما ترون أنه موجود داخل لوحة تحديث 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، قم بتعيين التركيز على مربع النص.

هنا هو جيد مسج طريقة القيام بذلك.ستضيف هذه الوظيفة معالج حدث keydown تلقائيًا إلى كافة مربعات النص الموجودة على الصفحة.باستخدام محددات مختلفة، يمكنك التحكم فيه إلى مستويات أكثر أو أقل دقة:

//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