NopCommerce 3.4中移動端訪問拋棄響應式布局

來源:互聯網
上載者:User

標籤:style   blog   http   io   color   os   ar   for   sp   

在Nop3.4中,他拋棄了原來的xxx.Mobile.cshtml的這種寫法,而是採用了響應式布局,並且把規則也給改了,你在後台配置不啟用響應式布局,在前台你仍然不能寫xxx.Mobile.cshtml這樣。查了一天的原因,終於查出來了。

首先請大家瞭解mvc4的新特徵:http://www.cnblogs.com/egger/p/3400076.html

看完這個,估計你也會被誤導,認為MVC已經自己支援了.Mobile.cshtml這種寫法。覺得他肯定是哪裡把那個設定給禁用了,反正我就是順著這種思路找了一個早上無果。最後我斷點跟蹤他Return View()的方法,發現,他根本沒有用MVC自己的那個方法,而是自己重寫了一套。

在Return View的時候,他請求到Nop.Web.Framework這個項目下面的Themes檔案夾裡面的ThemeableVirtualPathProviderViewEngine檔案中,在這個檔案中有這樣兩個方法:FindView 和FindPartialView,在這裡,他在3.4版本中的做法是直接把Controller丟到FindThemeableView方法中去執行了,然後細看FindThemeableView方法,你會發現,在它這裡面,他會用Controller和Aciton組合起來,最後拼成一個Nop中Cshtml的路徑。

比如像這樣:newLocations.Insert(0, "~/Administration/Views/{1}/{0}.cshtml"); //不是這句代碼,不要在這裡動手腳。。

所以,只要FindView 和FindPartialView傳過來的ControllerName,你給他加上你自己的規則,那他就會產生對應的路徑啦。

你看FindView裡面的這句 

ViewEngineResult result = FindThemeableView(controllerContext, ViewName, masterName, useCache);

很明顯的,他是在拼路徑,我們只要在這裡,把viewName改成ViewName.Mobile就完了。

代碼如下:

 1   /// <summary> 2         /// 判斷當前請求是不是從手機端過來的 3         /// </summary> 4         /// <param name="httpContext">HTTP context</param> 5         /// <returns>Result</returns> 6         public virtual bool IsMobileDevice(HttpContextBase httpContext) 7         { 8             //comment the code below if you want tablets to be recognized as mobile devices. 9             //nopCommerce uses the free edition of the 51degrees.mobi library for detecting browser mobile properties.10             //by default this property (IsTablet) is always false. you will need the premium edition in order to get it supported.11             bool isTablet = false;12             if (bool.TryParse(httpContext.Request.Browser["IsTablet"], out isTablet) && isTablet)13                 return false;14 15             if (httpContext.Request.Browser.IsMobileDevice)16                 return true;17 18             return false;19         }
IsMobileDevice
 1 /// <summary> 2         /// 返回View視圖 3         /// </summary> 4         /// <param name="controllerContext"></param> 5         /// <param name="viewName"></param> 6         /// <param name="masterName"></param> 7         /// <param name="useCache"></param> 8         /// <returns></returns> 9         public override ViewEngineResult FindView(ControllerContext controllerContext, string viewName, string masterName, bool useCache)10         {11             bool useMobileDevice = IsMobileDevice(controllerContext.HttpContext);//判斷請求是否從手機過來12             string overrideViewName = useMobileDevice ?13                 string.Format("{0}.{1}", viewName, _mobileViewModifier)14                 : viewName;//拼路徑_mobileViewModifier這是個string類型的變數,你也可以直接寫死稱Mobile或者Wap等等,到時候,你就是viewName._mobileViewModifier.cshtml15             ViewEngineResult result = FindThemeableView(controllerContext, overrideViewName, masterName, useCache);//找一下視圖16             if (useMobileDevice && (result == null || result.View == null))17                 result = FindThemeableView(controllerContext, viewName, masterName, useCache);//沒找到,再去找沒有帶尾碼的試圖18             return result;19         }
FindView
 1 public override ViewEngineResult FindPartialView(ControllerContext controllerContext, string partialViewName, bool useCache) 2         { 3             bool useMobileDevice = IsMobileDevice(controllerContext.HttpContext); 4             string overrideViewName = useMobileDevice ? 5                 string.Format("{0}.{1}", partialViewName, _mobileViewModifier) 6                 : partialViewName; 7             ViewEngineResult result = FindThemeablePartialView(controllerContext, overrideViewName, useCache); 8             if (useMobileDevice && (result == null || result.View == null)) 9             result = FindThemeablePartialView(controllerContext, partialViewName, useCache);10             return result;11         }
FindPartialView

 

NopCommerce 3.4中移動端訪問拋棄響應式布局

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.