ما هي أفضل طريقة لتنفيذ عناصر تحكم المستخدم في ASP.NET MVC؟

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

  •  09-06-2019
  •  | 
  •  

سؤال

مثل كثيرين آخرين في هذا الموقع، أفكر في الانتقال إلى ASP.NET MVC للمشاريع المستقبلية.تقوم مواقعي حاليًا بتشغيل نماذج ويب ASP.NET 2.0 التقليدية، وهي تعمل بشكل جيد بالنسبة لنا، لذا فإن خياري الآخر هو الالتزام بما أعرفه والانتقال إلى ASP.NET 3.5 باستخدام عناصر AJAX المدمجة.

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

ما هو النموذج في ASP.NET MVC؟هل هناك طريقة لإنشاء عناصر تحكم تحل المشكلات التي تعاملنا معها باستخدام ASCX وعناصر التحكم المركبة؟يعد السماح بالوصول السهل لمصممي الويب دون الحاجة إلى القلق بشأن كسر التعليمات البرمجية أحد الاعتبارات المهمة.

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

المحلول

لتنفيذ عنصر تحكم المستخدم، يمكنك إجراء المكالمة التالية:

<% Html.RenderPartial("~/Views/Shared/MyControl.ascx", {data model object}) %>

قد ترى أيضًا بناء الجملة الأقدم الذي لم يعد صالحًا اعتبارًا من PR5

<%= Html.RenderUserControl("~/Views/Shared/MyControl.ascx", {data model object}) %>

سيكون عليك دائمًا القلق بشأن كسر التعليمات البرمجية عند الانتقال من نماذج الويب إلى MVC، إلا أن فريق ASP.NET MVC قام بعمل رائع لتقليل المشكلات.

نصائح أخرى

كما اقترح Nick، ستتمكن بالفعل من عرض عناصر تحكم المستخدم الخاصة بك، ولكن من الواضح أن دورة الصفحة وحالة الصفحة وإعادة النشر من نماذج ASP Webforms التقليدية لن تعمل بعد الآن، مما يجعل عناصر التحكم الخاصة بك على الأرجح عديمة الفائدة.

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

وحول المشاركة بين المزيد من المشاريع:أعتقد أن عناصر التحكم ستكون أشبه بـ "مكونات عرض HTML القابلة لإعادة الاستخدام" والتي يمكن مشاركتها عبر موقع ويب، بدلاً من "مكونات التعليمات البرمجية القابلة لإعادة الاستخدام" مع المنطق (مثل عناصر تحكم WebForms).سيكون/ينبغي أن يكون منطق الويب الخاص بك موجودًا في وحدات تحكم الصفحات وليس في عناصر تحكم HTML.وبالتالي فإن عناصر التحكم في المشاركة عبر المزيد من المشاريع لن تكون مفيدة جدًا كما هو الحال في حالة WebForms.

لدى MVC دورة حياة صفحة مختلفة مقارنة بتحكم المستخدم الخاص بك.

قد تفكر في هذا لإعادة الكتابة.

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

بالنسبة للرمز الموجود خلف (aspx.cs) فإنك تحتاج إلى تحويله إلى ملف مراقب فصل.Page_Load لن تعمل الطريقة بعد الآن.من المحتمل أن تترك الأمر ل Index() طريقة.

نموذج هي ببساطة فئات الكيانات التي يستهلكها الكود الخاص بك.

الخلاصة، إنها إعادة كتابة كاملة.هتافات.ترميز سعيد.

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

يحرر: لقد نشرت للتو عن هذا هنا: http://mhinze.com/subcontrollers-in-aspnet-mvc/

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