2009-06-04 18 views
5

मैं एक webapp पर निम्नलिखित स्थिति है:कैशिंग asp.net MVC में आंशिक दृश्य

एक तालिका "कर्मचारी" कॉलम "विभाग" और "समारोह" शामिल हैं। दोनों ड्रॉपडाउनलिस्ट हैं।

"फंक्शन" dropdownlist विकल्पों का चयन "विभाग" पर निर्भर हैं। जब विभाग को बदलने

(ताकि प्रत्येक विभाग के कार्यों का अपना ही सूची है), मैं पैरामीटर "DepartmentId" के साथ एक नियंत्रक कार्रवाई करने के लिए एक ajax कॉल करते हैं। नियंत्रक पर एक [outputcache] विशेषता है, इसलिए जो कार्य करता है वह प्रत्येक विभाग आईडी के लिए कैश किया जाता है।

मेरी समस्या पृष्ठ की आरंभिक लोडिंग है। क्या आप एक दृश्य में नियंत्रक को कॉल कर सकते हैं और कैशिंग का लाभ उठा सकते हैं?

किसी को भी? 30 विचार और कोई जवाब नहीं .. मेरे प्रश्न के बारे में कोई टिप्पणी? बहुत स्पष्ट? बहुत कठिन? बहुत ही अजीब? गूगल के लिए कुछ (क्या मुझे वहां कोई समाधान नहीं मिला)?

उत्तर

4

फिल हैक ने Donut Hole Caching नामक एक समान विषय पर एक लघु ब्लॉग पोस्ट लिखा था। यह एक अच्छा प्रारंभिक बिंदु के रूप में काम करता है।

+0

अब यह सुनिश्चित नहीं है कि यह तय है लेकिन मैं वैसे भी जवाब के रूप में चिह्नित कर रहा हूं .. –

0

तुम्हारा मतलब है कि आप नियंत्रक कार्रवाई कि कार्यों सीधे उत्पन्न करता है, जबकि दृश्य और ajax के साथ नहीं पैदा कॉल करना चाहते हैं? अगर मैं इसे सही ढंग से समझ गया, तो मुझे नहीं लगता कि आउटपुट कैश में डेटा प्राप्त करना संभव है (हालांकि मैं गलत हो सकता हूं)। वैसे भी, अगर आप इसे प्राप्त कर सकते हैं, तो आपको अभी भी डेटा को फिर से डीकोड करना होगा।

तुम भी करने के लिए

  • कैश विभाग HttpContext.Cache में अपने आप को आईडीएस कोशिश करते हैं और (दोनों कार्यों में उन्हें इस्तेमाल हो सकता है कि इतने है तेजी से आप OutputCache और आवश्यकता नहीं है और डबल की जरूरत नहीं है हो सकता है संचय करना)
  • या यदि विभागों/कार्यों की संख्या इतनी बड़ी नहीं है, आप सभी कार्यों के साथ एक json संरचना बना सकते हैं, उन्हें ध्यान में रखते हुए की दुकान और सब पर ajax का उपयोग नहीं करते।
4

मैं subcontrollers बेहतर अभी भी आंशिक अनुरोधों का प्रयोग करेंगे या आप क्या कह रहे हैं क्या करना है। एक सामान्य पृष्ठ में मैं पूरे पृष्ठ को कैश नहीं करता हूं बल्कि इसके बजाय विभिन्न क्रिया विधियों में क्षेत्रों को तोड़ देता हूं जिन्हें आंशिक अनुरोधों के माध्यम से बुलाया जाता है। इस तरह मैं अलग-अलग समाप्ति के साथ प्रत्येक क्षेत्र पर आउटपुट कैशिंग कर सकता हूं। यह अधिक पृष्ठ जीवन चक्र है लेकिन जब उन्हें कैश किया जाता है तो वे वास्तव में प्रदर्शन पर कर नहीं होते हैं। यदि यह प्रदर्शन के तहत शुरू होता है तो एक विशिष्ट क्षेत्र को बनाए रखने और अनुकूलित करने के लिए भी बहुत आसान है।

मेरे अनुभव में यह AJAX पैटर्न के साथ भी बहुत अच्छी तरह से फिट बैठता है क्योंकि आप केवल एक ही क्रिया विधि से अपने डेटा को "प्राप्त" करते हैं।

आंशिक अनुरोध चर्चा कर रहे हैं here और subcontrollers here

आशा इस मदद करता है।

संबंधित मुद्दे