كيف يمكنني الوصول إلى عنصر التحكم من جانب الخادم في التعليمات البرمجية الخلفية في مشروع MVC الخاص بي؟

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

سؤال

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

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

لي النهج الأولي كان من المفترض أن يكون لديك موقعان على الويب (موقع WebForms وموقع MVC) ثم ربط الموقعين باستخدام iFrames من جانب MVC.على الرغم من أنني أعلم أن ذلك سينجح، إلا أنه كان مجرد استخدام عنصر التحكم هذا أمرًا مبالغًا فيه بعض الشيء.وبعد إجراء المزيد من الأبحاث، I اكتشف أنه يمكنني "المزج بين الأولاد" واستخدام بنية WebForms داخل مشروع MVC.ولذلك، فإن النهج الجديد الذي اتخذته هو فقط انسخ الصفحات التي تستخدم عنصر تحكم الطرف الثالث هذا إلى دليل محدد (على سبيل المثال.'View\SomeDir\WebForms') ثم تجاهل هذا الدليل في ملف global.asax الخاص بي حتى لا يلتقطه نظام التوجيه MVC:

routes.IgnoreRoute("View\SomeDir\WebForms\{*pathInfo}");

لسوء الحظ، عندما قمت بالنسخ عبر صفحة ASPX إلى مشروع MVC الخاص بي، اكتشفت أن CodeBehind لا يمنحني حق الوصول إلى التحكم الخاص بي على الصفحة.وإليكم كيفية إعداد الأمور:

<%@ Register 
  Assembly="..." 
  Namespace="..." 
  TagPrefix="custom" %>

<custom:SomeControl ID="customControl" runat="server" />

إليك ما يبدو عليه الكود الخاص بي:

public class MyPage : Page
{
  protected void Page_Load(object sender, EventArgs args)
  {
     Debug.WriteLine(customControl.ID); // <-- COMPILE ERROR: Cannot resolve symbol 'customControl'
  }
}

لسوء الحظ، لن يتم تجميع مشروعي لأنني أتلقى هذا الخطأ في كل عنصر تحكم في CodeBehind الخاص بي.إنها ليست مشكلة في تحويل عناصر التحكم الأخرى (أي.التسميات واللوحات ومربعات النص وما إلى ذلك.) إلى علامات العميل، ولكنني بحاجة إلى الوصول إلى عنصر التحكم المخصص هذا في الكود الخاص بي حتى أتمكن من الاستماع إلى الأحداث (من جانب الخادم) والرد وفقًا لذلك؛عناصر WebForms الأساسية...

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

شكرا مقدما على أي نصيحة!

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

المحلول

تبا!!لقد وجدت الحل بعد 10 دقائق من نشر هذا.

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

شكرًا على القراءة وآمل أن يساعد سؤالي/إجابتي شخصًا آخر في يوم من الأيام.:)

نصائح أخرى

لا أرى فائدة من نقل شيء ما إلى MVC فقط للاحتفاظ بنصفه في نماذج WebForms التقليدية.

سيعني هذا النهج أن أي مطورين مستقبليين سيحتاجون إلى التعرف على كلتا التقنيتين وهو ليس نظيفًا في رأيي.

سأختار أحدهما أو الآخر وأحاول تجنب الخلط بين الاثنين.

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