2011-07-22 6 views
6

मैं एएसपी.नेट एमवीसी 3 डब्ल्यू/रेजर का उपयोग करके एक नई परियोजना पर काम कर रहा हूं और उसी साइट के 2 अलग-अलग विचारों, एक पूर्ण संस्करण और मोबाइल संस्करण का विकास कर रहा हूं। समान नियंत्रकों का उपयोग करने के लिए सर्वोत्तम प्रथाओं/दृष्टिकोण क्या हैं, लेकिन उपयोगकर्ता एजेंट के आधार पर अलग-अलग विचार प्रदर्शित करते हैं? क्या मुझे इसे नियंत्रकों में संभालना चाहिए? ऐसा लगता है कि यह बोझिल, अनावश्यक, त्रुटि होगी यदि प्रत्येक नियंत्रक कार्रवाई में स्टेटमेंट उपयोगकर्ता एजेंट की जांच कर रहा है और फिर उनके डिवाइस के आधार पर एक अलग दृश्य लौटा रहा है।एएसपी.नेट एमवीसी समान नियंत्रकों का उपयोग कर अलग-अलग मोबाइल दृश्य

+2

मुझे लगता है उसका उल्लेख कर इस * योजना बनाई है लायक है * एमवीसी 4 के लिए http://aspnet.codeplex.com/wikipage?title=ASP.NET%20MVC%204%20 रोडमैप –

+0

कृपया एक सही के रूप में एवरर को चिह्नित करें। –

उत्तर

7

यह अब का उपयोग कर पूरा किया जा सकता निर्मित एक दो प्रदर्शन मोड में निर्मित के साथ "DisplayModes"

डिफ़ॉल्ट रूप से, ASP.NET MVC जहाजों बुलाया (4 संस्करण के बाद से) ASP.NET MVC की सुविधा। डिफॉल्ट डिस्प्ले मोड है, जो आपके "मानक" विचारों को हमेशा के रूप में प्रस्तुत करता है, और एक सामान्य "मोबाइल" डिस्प्ले मोड भी है।

यह पता लगाकर काम करता है कि क्लाइंट डिवाइस एक मोबाइल ब्राउज़र है या नहीं (जिसे क्लाइंट डिवाइस के User-Agent string को स्नीफ करके निर्धारित किया जाता है, इसलिए 100% विश्वसनीय नहीं)। यदि डिवाइस मोबाइल डिवाइस होने के लिए निर्धारित है, तो क्लाइंट को भेजे गए वास्तविक एमवीसी व्यू को ओवरराइड किया गया है और वैकल्पिक दृश्य प्रस्तुत किया जाता है और इसके बजाय भेजा जाता है। शामिल मोबाइल प्रदर्शन मोड के मामले में, यह एक नहीं बल्कि .cshtml से .mobile.cshtml का प्रत्यय के साथ देखें (जैसा कि नीचे स्क्रीनशॉट में दिखाया गया)

Image of solution explorer showing mobile view file

यह आपको पूरी तरह से अलग विचारों डिजाइन करने के लिए अनुमति देता है देखने के लिए कॉन्फ़िगर किया गया है जिसे आपके नियंत्रक तर्क में किसी भी परिवर्तनों की आवश्यकता के बिना एक मोबाइल बनाम एक गैर-मोबाइल डिवाइस पर भेजा जाएगा, इसलिए आपको वहां कोई सशर्त तर्क शामिल करने की आवश्यकता नहीं है।

यदि आपको क्लाइंट डिवाइस पर भेजे गए सटीक दृश्य पर अधिक नियंत्रण की आवश्यकता होती है, तो संपूर्ण प्रदर्शन मोड कार्यक्षमता कॉन्फ़िगर करने योग्य और एक्स्टेंसिबल है। आप अपने स्वयं के डिस्प्ले मोड (आमतौर पर एप्लिकेशन स्टार्टअप में प्रदर्शन) को परिभाषित कर सकते हैं जो किसी दिए गए ब्राउज़र, किसी दिए गए डिवाइस या आपकी मनमानी परिभाषा के लिए विशिष्ट हो सकता है। सभी क्लाइंट डिवाइस से आने वाले उपयोगकर्ता एजेंट स्ट्रिंग पर आधारित हैं।

निम्नलिखित स्निपेट पर विचार करें कि नीचे ऐप्लिकेशन प्रारंभ विधि में विंडोज फोन, iPhone और Android के लिए 3 अतिरिक्त कस्टम प्रदर्शन मोड जोड़ने पता चलता है:

protected void Application_Start() 
{ 
    DisplayModeProvider.Instance.Modes.Insert(0, new DefaultDisplayMode("WP") 
    { 
     ContextCondition = (context => context.GetOverriddenUserAgent(). 
      IndexOf("Windows Phone OS",StringComparison.OrdinalIgnoreCase) >= 0) 
    }); 

    DisplayModeProvider.Instance.Modes.Insert(1, new DefaultDisplayMode("iPhone") 
    { 
     ContextCondition = (context => context.GetOverriddenUserAgent(). 
      IndexOf("iPhone", StringComparison.OrdinalIgnoreCase) >= 0) 
    }); 

    DisplayModeProvider.Instance.Modes.Insert(2, new DefaultDisplayMode("Android") 
    { 
     ContextCondition = (context => context.GetOverriddenUserAgent(). 
      IndexOf("Android", StringComparison.OrdinalIgnoreCase) >= 0) 
    }); 
} 

प्रत्येक प्रदर्शन मोड एक आईडी और के लिए एक स्ट्रिंग दिया जाता है यह निर्धारित करने के लिए कि यह डिस्प्ले मोड उपयोग किया जाना है, उपयोगकर्ता एजेंट स्ट्रिंग से मिलान करें। यदि ऐसा है, तो DisplayModeProvider एक ही स्ट्रिंग प्रत्यय के साथ एक दृश्य की तलाश करेगा। (यानि ऊपर आईफोन डिस्प्ले मोड के लिए, हम उपयोगकर्ता एजेंट स्ट्रिंग में कहीं भी स्ट्रिंग "आईफोन" ढूंढने की उम्मीद करते हैं, और यदि यह मौजूद है, तो हम इस डिस्प्ले मोड का उपयोग करते हैं जो प्रत्यय के बजाय iphone.cshtml प्रत्यय के साथ दृश्य प्रस्तुत करता है।

आप इस कार्यक्षमता के बारे में अधिक पढ़ सकते हैं:। http://www.asp.net/mvc/overview/older-versions/aspnet-mvc-4-mobile-features वर्गों में विशेष रूप से अध्यक्षता में "अधिभावी दृश्य, लेआउट, और आंशिक दृश्य" और "ब्राउज़र-विशिष्ट दृश्य"

+0

ग्रीस के लिए धन्यवाद जवाब नहीं! आपके उत्तर के आधार पर मैं कोड में अलग-अलग छवियों के लिए पथ बनाना चाहता हूं, न कि 'व्यू' में। क्या किसी भी तरह नियंत्रक में करना संभव है? –

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