سؤال

وأنا جديدة على usercontrols، بعد أن خلق واحد فقط حتى الآن، لذلك يتحمل معي. لقد تم قراءة اليوم أن usercontrols من المفترض أن تكون مكتفية ذاتيا وعدم الاعتماد على أي معلومات من الحاوية الأصل. أحصل على هذا الجزء، ولكن ما أواجه صعوبة في فهم هو "الحق" وسيلة لتصميم برنامجي حول هذا المبدأ.

وأنا صنع نموذج ويب في C # فيه هناك صفحة مع UserControl في تلك الصفحة. لقد قدمت في UserControl في ملف ASCX وسحبه إلى صفحة aspx بلدي. في UserControl هو صناديق تاريخ الزوجين وGridView لعرض نتائج إجراء SQL المخزنة.

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

والشكر

هل كانت مفيدة؟

المحلول

ولا تعتمد على الحاوية الأصل لا يعني أنك لا يمكن الاتصال. يعرض خاصية في عنصر تحكم المستخدم الذي سيحدد الأم. ولكن لديها القيمة الافتراضية لذلك لا تحطم الطائرة.

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

نصائح أخرى

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

وأنت في عداد المفقودين على القوة الحقيقية لعناصر تحكم المستخدم إذا لم يكن ليسمح لها التواصل مع انها الأم. أعتقد أنك قد تكون آخذة التغليف قليلا بعيدا جدا في هذه الحالة.

وافترض لديك عنصر تحكم المستخدم الذي هو مجرد جدول أو gridview بيانات المستخدم المختلفة. حتما أن تحكم المستخدم سوف تحتاج لمعرفته حول المعرف الفريد للمستخدم من أجل ان تسحبه من البيانات من أي مكان كان، والتي من القوات بالطبع لك لجعل الممتلكات العامة أن الصفحة الرئيسية يمكن أن يحدد.

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

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

وهكذا كان لديك بعض الأمور داخل هذا التحكم المستخدم الذي سوف DataBind عناصر إلى مجموعة البيانات التي يتم إرجاعها من قبل الإجراء المخزن؟

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

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

وكما أشار الجميع بها، يجب التحكم الخاصة بك لديك وسيلة معيارية للتواصل نواياها والسلوكيات. هذا لا يعني أن يكون لديك إشارة إلى الحاوية، وبالتالي معرفة ما (MyPage.aspx) يحتوي عليه في الواقع.

والشيء الذي وجدتها لا غنى عنه بينما كان يعمل مع عناصر تحكم المستخدم هو الأحداث. تعلم الأحداث وكيفية استخدامها. الأحداث هي وسيلة رائعة للتواصل السلوك.

في المثال الخاص بك، وأنا قد تقسيم خارج المعايير الخاصة بك (مربعات النص التاريخ) إلى سيطرة المستخدم الخاصة به. إنشاء فئة جديدة يرث من EventArgs، التي تحتوي على المعايير الخاصة بك (حقول DateTime). عندما ينقر المستخدم البحث، إطلاق حدث (من نوع EventHandler<YourEventArgs>) مع EventArgs المخصصة. الصفحة سوف التعامل مع هذا الحدث، الاستعلام عن قاعدة بيانات، ومن ثم تمرير النتائج إلى أسلوب العام أو الداخلي على جهاز التحكم عن المستخدم الثانية، والذي يعرض السجلات.

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

واحد فائدة كبيرة هي أن الصفحات وعناصر التحكم الخاصة بك تصبح صغيرة نوعا ما. كل عنصر تحكم / الصفحة هو حقا المعنية فقط مع مجموعة فرعية صغيرة لها من وظائف. وسوف تصبح الشفرة أقل ترويعا وأسهل للمحافظة عليه.

<اقتباس فقرة>   

و"تخبر" في UserControl ما الإجراء المخزن أود أن تشغيل

ويبدو وكأنه كنت تبحث عن الأحداث / مندوبين
تملك السيطرة فضح هذا الحدث، والسماح الوالد إضافة معالج (ربما في منشئ، إذا كنت ترغب في إجبارها على إضافة واحد وحالة واحدة فقط)
بدلا من ذلك، يمكنك استخدام نمط القيادة / استراتيجية - أن يكون الوالد تغليف الطريقة، وإرسال كائن تغليف إلى عنصر التحكم في المنشئ الخاص به

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top