2012-07-18 12 views
6

मैं टैबलेट और मोबाइल के लिए अलग-अलग विचार करने की कोशिश कर रहा हूं। App_start में मेरे पास यह कोडएमवीसी 4 मोबाइल और टैबलेट व्यू अलगाव

DisplayModeProvider.Instance.Modes.Insert(0, new 
     DefaultDisplayMode("Tablet") 
     { 
      ContextCondition = (ctx => 
      ctx.Request.UserAgent.IndexOf("iPad", StringComparison.OrdinalIgnoreCase) >= 0 || 
      ctx.Request.UserAgent.IndexOf("Android", StringComparison.OrdinalIgnoreCase) >= 0) 
     }); 

मैंने दो लेआउट फाइलें बनाई हैं, एक मोबाइल के लिए और एक टैबलेट के लिए। लेकिन जब मैं एंड्रॉइड पर मोबाइल डिवाइस से एक्सेस कर रहा हूं तो संघर्ष होता है। यह मुझे लेआउट.tablet पर रीडायरेक्ट करता है। मैं उन दो उपकरणों को कैसे अलग कर सकता हूं?

उत्तर

8

मैंने ब्राउज़र में उपयोगकर्ता-एजेंट स्विचर के साथ इसका परीक्षण किया है और यह ठीक काम करता है।

DisplayModeProvider.Instance.Modes.Insert(0, new 
     DefaultDisplayMode("Tablet") 
     { 
      ContextCondition = (ctx => 
      ctx.Request.UserAgent.IndexOf("iPad", StringComparison.OrdinalIgnoreCase) >= 0 || 
      ctx.Request.UserAgent.IndexOf("Android", StringComparison.OrdinalIgnoreCase) >= 0 && 
      ctx.Request.UserAgent.IndexOf("mobile", StringComparison.OrdinalIgnoreCase) < 1) 
     }); 

     DisplayModeProvider.Instance.Modes.Insert(1, new DefaultDisplayMode("Mobile") 
     { 
      ContextCondition = (ctx => 
       ctx.GetOverriddenBrowser().IsMobileDevice) 
     }); 
+0

हे-बू, तुमने मेरी महिमा वापस बेकार की !! :) –

1

neowinian,

तर्क से एक अतिरिक्त टुकड़ा जोड़ने का प्रयास करें:

&& ctx.Request.UserAgent.IndexOf("mobile", StringComparison.OrdinalIgnoreCase) < 0 

इस टैबलेट के लिए अपने DisplayMode से सभी मोबाइल उपकरणों को बाहर निकाल देगा।

DisplayModeProvider.Instance.Modes.Insert(1, new DefaultDisplayMode("Mobile") 
{ 
    ContextCondition = (ctx => 
     ctx.GetOverriddenBrowser().IsMobileDevice) 
}); 
0

आप http://51degrees.mobi की तरह एक सेवा पर एक नज़र हुई है कि आप के लिए सभी उपयोगकर्ता-एजेंट/उपकरण बड़े कार्य करने से करता है:

DisplayModeProvider.Instance.Modes.Insert(0, new DefaultDisplayMode("Tablet") 
{ 
    ContextCondition = (ctx => 
    (ctx.Request.UserAgent.IndexOf("iPad", StringComparison.OrdinalIgnoreCase) >=0 
     || ctx.Request.UserAgent.IndexOf("Android", StringComparison.OrdinalIgnoreCase) >= 0) 
     && ctx.Request.UserAgent.IndexOf("mobile", StringComparison.OrdinalIgnoreCase) < 0) 
}); 

इसके अतिरिक्त, आप को देखो सकता है? हालांकि यह मुफ़्त नहीं है, वे एक "लाइट" संस्करण करते हैं जो आपको बहुत कुछ देता है, हालांकि मुझे लगता है कि "IsTablet" उनके प्रीमियम संस्करण में कुछ है।

+0

मैंने कोशिश की है लेकिन एमवीसी 4 मोबाइल फीचर्स के साथ आता है जो मेरे लिए काफी साफ है। – jasenkoh

0

आप विभिन्न डिवाइस प्रकारों का पता लगाने में आपकी सहायता के लिए 51 डिग्री मुक्त क्लाउड आधारित समाधान का उपयोग कर सकते हैं। IsMobile और IsTablet गुणों का उपयोग करके, आप परिणाम के आधार पर रीडायरेक्ट कर सकते हैं। आप वेबसाइट से मुफ्त क्लाउड उत्पाद प्राप्त कर सकते हैं और एक नि: शुल्क क्लाउड कुंजी प्राप्त कर सकते हैं। जानकारी के लिए एपीआई का उपयोग कैसे करें आप यहां ट्यूटोरियल देख सकते हैं। https://51degrees.com/Developers/Documentation/APIs/Cloud-API/NET-Cloud

उदाहरण के लिए आप नीचे दिखाए गए अनुसार समान प्रकार के डिवाइस प्रकार को वापस करने का अनुरोध कर सकते हैं, फिर प्रतिक्रिया के आधार पर अपने रीडायरेक्ट तर्क को डालें।

@using (var webClient = new System.Net.WebClient()) 
{ 
    string json = webClient.DownloadString(String.Format(
    "https://cloud.51degrees.com/api/v1/{0}/match?user-agent= 
{1}&values=DeviceType", 
    "YOUR KEY HERE", 
    HttpUtility.UrlEncode(Request.UserAgent))); 

dynamic match = Newtonsoft.Json.Linq.JObject.Parse(json); 
    SortedList<string, string[]> values = Newtonsoft.Json.JsonConvert.DeserializeObject<SortedList<string, string[]>>(match.Values.ToString()); 
    string[] hvValues; 

if (values.TryGetValue("DeviceType", out hvValues)) 
    { 
foreach (string s in hvValues) 
{ 
<h4> 
    Device Type: 
    @s 
</h4> 
} 
    } 

प्रकटीकरण: मैं 51 डिग्री पर काम करता हूं।

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