أنت غير متصل حاليًا، وفي انتظار الإنترنت الخاص بك ليقوم بإعادة الاتصال

PRB: بالالتقاط ASP.NET أحداث Change حتى إذا لم تقم بتغيير قيمة عنصر التحكم

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

اضغط هنا لرابط المقالة باللغة الانجليزية314809
الأعراض
تحت ظروف معينة بالالتقاط ASP.NET تغيير حدث ويب ASP.NET التحكم حتى إذا لم تقم بتغيير عنصر التحكم.
السبب
تعتمد بعض عناصر تحكم مثل الحدث SelectedIndexChanged في عنصر تحكم DropDownList أو الحدث TextChanged في عنصر تحكم مربع نص على تسجيل الحدث Change لاستخدام بحالة العرض. تواجه هذه المشكلة عند إنشاء عناصر التحكم هذه بشكل حيوي بعد ربط الحدث.

عندما يعرض ASP.NET إلى المستعرض الصفحة ، لا تحتوي عناصر التحكم التي تم إنشاؤها بشكل حيوي حدث تغيير مقترنة. لأن الحدث لم يكن موجوداً، ASP.NET لا يحفظ حالة العرض. يسمى هذا "عرض حالة أمثلية".

عند نشر الصفحة مرة أخرى وعند يتم ربط الأحداث يتوقع بحالة العرض ASP.NET ولكن يبحث عن وجود أي. هذا الاختلاف وقع الحدث Change حتى إذا لم يتم تغيير عنصر التحكم.
الحل
تأكد من ربط الحدث Change لعناصر تحكم تم إنشاؤه بشكل حيوي قبل ASP.NET يعرض الصفحة. يضمن هذا وجود بحالة العرض لعنصر التحكم.
تصريح
يعتبر هذا السلوك حسب التصميم.
معلومات أخرى

خطوات إعادة إنشاء في سلوك

إنشاء نموذج ويب

  1. إنشاء تطبيق ASP.NET Visual Basic جديد يسمى ChangeFired.
  2. افتح WebForm1 في وضع المصمم. اسحب عنصر تحكم DataList عنصر تحكم زر والتحكم DataSet إلى النموذج.
  3. في مربع الحوار إضافة DataSet انقر فوق مجموعة بيانات مصنف ثم انقر فوق موافق. الاحتفاظ بأسماء الافتراضي لكافة عناصر التحكم.
  4. تحرير مجموعة جداول DataSet1. إضافة جدول جديد يسمى جدول1.
  5. تحرير مجموعة Columns جدول1. إضافة عمود جديد باسم Column1.
  6. انقر فوق DataList1 ثم قم بتغيير الخاصية DataSource إلى DataSet1.
  7. انقر بزر الماوس الأيمن فوق DataList1 وأشر إلى تحرير القالب ثم ثم انقر فوق قوالب العنصر. قم بسحب عنصر تحكم DropDownList إلى المقطع ItemTemplate.
  8. انقر فوق DropDownList1 ثم قم بإضافة عناصر خمسة إلى مجموعة العناصر. تعيين نص "و" خصائص "القيمة" من هذه العناصر إلى أحدجهازي ، ثلاثة ، أربعة و خمس على التوالي.
  9. تعيين الخاصية AutoPostBack إلى true DropDownList1.
  10. تحرير مجموعة DataBindings DropDownList1. إضافة تعبير الربط المخصص التالي إلى الخاصية SelectedIndex:
    DataBinder.Eval(Container, "DataItem.Column1")					
  11. التبديل إلى طريقة عرض HTML. تعيين سمة التتبع إلى true في توجيه الصفحة @ كما يلي:
    <%@ Page Language="vb" AutoEventWireup="false" Codebehind="WebForm1.aspx.vb" Inherits="ChangeFired.WebForm1" trace="true" %>					

إضافة ملف رمز الخلفية

  1. انقر بزر الماوس الأيمن فوق WebForm1.aspx ومن ثم انقر فوق عرض التعليمات البرمجية.
  2. قم بإضافة التعليمات البرمجية التالية إلى الحدث Page_Load:
    DataSet1.Tables(0).Rows.Add(New Object() {"1"})DataSet1.Tables(0).Rows.Add(New Object() {"2"})DataSet1.Tables(0).Rows.Add(New Object() {"3"})DataSet1.Tables(0).Rows.Add(New Object() {"4"})If Not IsPostBack Then  DataBind()End IfDim objItem As DataListItemFor Each objItem In DataList1.Items  AddHandler CType(objItem.FindControl("DropDownList1"), _  DropDownList).SelectedIndexChanged, AddressOf DropDownList1_SelectedIndexChanged  If Not objItem.FindControl("DropDownList1") Is Nothing Then    Trace.Write("Added SelectedIndexChanged Handler")  End IfNext					
  3. إنشاء إجراء Sub جديد أسفل الحدث Page_Load لمعالجة حدث SelectedIndexChanged كما يلي:
    Private Sub DropDownList1_SelectedIndexChanged(ByVal sender As System.Object, _ByVal e As System.EventArgs)  DataBind()  Trace.Write("SelectedIndexChanged, DataBind()")  'Uncomment the following code to resolve this problem.  'Dim objItem As DataListItem  'For Each objItem In DataList1.Items  '  AddHandler CType(objItem.FindControl("DropDownList1"), _  '  DropDownList).SelectedIndexChanged, AddressOf DropDownList1_SelectedIndexChanged  'NextEnd Sub					

تشغيل في نموذج

  1. تشغيل الصفحة. لاحظ أن يتضمن عناصر DropDownList تم إنشاؤه بشكل حيوي بحالة العرض في معلومات التتبع شجرة التحكم.

    يحدث هذا لأن استدعاء الأسلوب DataBind ديناميكياً بإنشاء عناصر تحكم DropDownList ربط معالج الأحداث بعد استدعاء DataBind في الحدث Page_Load. بسبب وجود عناصر التحكم معالج أحداث، عرض حالة أمثلية لا يحدث.
  2. انقر فوق الزر على الصفحة. لاحظ أنه تحدث عملية نشر مرة أخرى يتم تشغيل التعليمات البرمجية فقط داخل الحدث Page_Load. حالة العرض موجودة لعناصر تحكم DropDownList لأن معالج أحداث المقترنة بعنصر التحكم.
  3. تغيير القيمة في أحد عناصر تحكم DropDownList. لاحظ أن تحدث عملية نشر مرة أخرى. بالإضافة إلى ذلك، لاحظ وقع الحدث Page_Load وتشغيل الحدث DropDownList1_SelectedIndexChanged ASP.NET.
  4. في الحدث DropDownList1_SelectedIndexChanged استدعاء الأسلوب DataBind مرة أخرى لإنشاء عناصر تحكم DropDownList جديدة.

    لأنه لا يتم ربط الحدث SelectedIndexChanged على عناصر التحكم DropDownList هذه ، يستخدم "أمثلية حالة عرض" ASP.NET و لا يحفظ حالة العرض لعناصر تحكم DropDownList جديد.
  5. مراجعة معلومات التتبع شجرة التحكم. لاحظ أن عناصر التحكم DropDownList لا يكون لها بحالة العرض.
  6. انقر فوق الزر على الصفحة. لاحظ أن تحدث عملية النشر مرة أخرى, ، ولاحظ أن يعمل ASP.NET الحدث Page_Load. لأنه يمكنك ربط الحدث SelectedIndexChanged إلى عناصر التحكم DropDownList يتوقع ASP.NET بحالة العرض كي يتم اقترانه مع عناصر التحكم.

    ومع ذلك، لعدم وجود بحالة العرض ASP.NET وقع الحدث SelectedIndexChanged بالرغم من تحديد عنصر.

الدقة

لحل هذه المشكلة، uncomment التعليمات البرمجية الموجودة في الحدث DropDownList1_SelectedIndexChanged بحيث معالجات الأحداث ربط مع عناصر تحكم تم إنشاؤه حديثاً.
حالة العرض

تحذير: تمت ترجمة هذه المقالة تلقائيًا

خصائص

رقم الموضوع: 314809 - آخر مراجعة: 05/03/2004 23:53:02 - المراجعة: 2.7

Microsoft ASP.NET 1.1, Microsoft ASP.NET 1.0

  • kbmt kbdatabinding kbevent kbprb kbservercontrols kbstate kbwebforms KB314809 KbMtar
تعليقات
1&t=">ld(m); ge in languagesListForLargeScreens track by $index -->
Venezuela - Español
p;did=1&t=">r varClickTracking = 1; var varCustomerTracking = 1; var Route = "76500"; var Ctrl = ""; document.write("