سؤال

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

في لدت WebForms، كنا UserControls. فإن كل UserControl تسجيل CSS، وجافا سكريبت عن طريق مجموعة التي تم تخزينها في HttpContext.Current.Items. بعد ذلك يتم دمج هذه المجموعة لإخراج كما طلب واحد. عادة هذا يمكن أن يحدث في الحدث Page_Load، وسوف الصفحة التي تحتوي ثم تجعل من علامة النصي التي من شأنها أن تشمل جميع جافا سكريبت وCSS اللازمة لتلك الصفحة.

لقد تم يكافح مع تفعل الشيء نفسه في MVC. نحن نستخدم عددا من الآراء داخل masterpage لتقليد الحاجيات. كل القطعة ديها حدة التحكم الخاصة به، وبالتالي فإن وظيفة يمكن أن يكون فصل بما فيه الكفاية. وmasterpage يتراكم الحاجيات على الصفحة باستخدام RenderAction من العقود الآجلة MVC. أصلا كنا باستخدام طريقة التسجيل نفس للملفات / JS CSS. أن كل وحدة تحكم تسجيل الملفات المطلوبة منها في العمل. وعلى أن تدرج الملفات في جمع HttpContext.Current.Items، وسيتم تقديم إلى الصفحة. ولتيسير ذلك، كتبت امتدادا HtmlHelper لتقديم وصلات / مخطوطات إلى الصفحة. يبدو مثل هذا:

<%= Html.GetRegisteredCssFiles() %>

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

هل لديها أي أفكار بشأن كيف ينبغي لنا أن يكون بناء هذا؟ أنا أبحث عن الأجوبة التي تتضمن أفضل الممارسات لMVC.

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

المحلول

وسئل هذا السؤال الكثير من الوقت قبل، لذلك ربما كنت قد تناولت هذا بالفعل. ولكن للزوار في المستقبل، وربما سيكون هذا الحل أن تكون مفيدة: http://marcinbudny.blogspot.com/2010/01/handling -stylesheet-مراجع in.html

نصائح أخرى

وأدوات مجانية Telerik MVC لها السيناريو وسجل النمط الذي قد تفعل ما تريد ...

ولست متأكدا إذا كان هذا هو الحل الممكن بالنسبة لك، ولكن حاول أن تتحرك استدعاء أسفل كل صفحة.

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

والبديل هو أن يكون GetRegisteredFiles () خرج بعض جافا سكريبت الذي يقوم بتحميل ملفات CSS في المكان المناسب (عن طريق التلاعب DOM).

والمشكلة مع أي من هذه الحلول هو أن لا يتم تضمين الملفات حتى النهاية، مما قد يتسبب في الصفحة للبحث "عادي" حتى يتم تحميل CSS.

وبدلا من ذلك، وحدة تحكم يمكن التنبؤ الذي "الحاجيات" سوف الحصول على تحميل وتمرير البيانات إلى الصفحة الرئيسية.

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