2013-04-22 3 views
2

У меня есть два шаблона в Umbraco. Один для настольных компьютеров и другой для мобильных устройств. У меня есть небольшой скрипт, который определяет пользовательский агент запроса и соответственно перенаправляет пользователя.Страница перенаправления без изменения URL-Umbraco | C#

Если запрос сделан с рабочего стола, пользователь перенаправляется на шаблон рабочего стола с URL-адресом www.abc.com.

Если запрос был сделан с мобильного пользователя перенаправляется на мобильный шаблон с URL www.abc.com/?alttemplate=mobilehomepage

Как сделать URL же для настольных и мобильных устройств.

Я использую Response.Redirect для перенаправления.

Заранее благодарен.

+1

Вы _might_ быть в состоянии использовать [Server.Transfer] (http://stackoverflow.com/questions/224569/server-transfer-vs-response-redirect) для этого – DGibbs

+0

@DGibbs Большое спасибо за комментарий. Когда я использую Server.Transfer («? Alttemplate = mobiletemplate»); Я получаю System.ArgumentNullException – aaviss

+0

Это похоже на значение строки запроса, а не на страницу? Не должен ли параметр быть чем-то вроде: 'www.abc.com/? Alttemplate = mobilehomepage'? – DGibbs

ответ

5

Все решения шаблона Umbraco проходят через default.aspx (.cs), и программно можно изменить шаблон путем переопределения метода PreInit.

Так вот как я достиг этого в Default.aspx.cs файл с templatenameMobile, templatenameDesktop & templateNameTablet шаблоны, Очевидно, что вам нужно методы говорят ли вы служите на мобильный, планшет или рабочий стол (который можно вывести из агент пользователя):

 protected override void OnPreInit(EventArgs e) 
     { 
      base.OnPreInit(e); 

      string userAgent = Request.UserAgent; 
      bool isTablet = IsTablet(userAgent); 
      bool isMobile = IsMobile(userAgent); 

      int templateId = umbraco.NodeFactory.Node.GetCurrent().template; 
      umbraco.template template = new umbraco.template(templateId); 
      string templateName = StripDevice(template.TemplateAlias); 

      if (isTablet) 
      { 
       Page.MasterPageFile = GetTabletMaster(templateName); 
      } 
      else if (isMobile) 
      { 
       Page.MasterPageFile = GetMobileMaster(templateName); 
      } 
      else 
      { 
       Page.MasterPageFile = GetDesktopMaster(templateName); 
      } 

} 

    public string GetMobileMaster(string templateName) 
    { 
     try 
     { 
      MasterPage masterPage = new MasterPage(); 
      masterPage.MasterPageFile = string.Format("/masterpages/{0}mobile.master", templateName); 
      if (masterPage == null) 
      { 
       masterPage.MasterPageFile = string.Format("/masterpages/{0}desktop.master", templateName); 
      } 
      if (masterPage == null) 
      { 
       return Page.MasterPageFile; 
      } 
      else 
      { 
       return masterPage.MasterPageFile; 
      } 
     } 
     catch (Exception ex) 
     { 
      umbraco.BusinessLogic.Log.Add(umbraco.BusinessLogic.LogTypes.Error, umbraco.BusinessLogic.User.GetUser(0), -1, "Switch template to MOBILE fail " + templateName + " : " + ex.Message); 
      return Page.MasterPageFile; 
     } 
    } 
+0

Большое спасибо. где я могу найти файл default.aspx.cs. Пожалуйста помоги. В корневой папке у меня есть только файл default.aspx.cs с одной строкой ** <% @ Page language = "C#" Codebehind = "default.aspx.cs" AutoEventWireup = "True" Inherits = "umbraco.UmbracoDefault" trace = "true" validateRequest = "false"%> ** Должен ли я добавить код – aaviss

+0

Его немного сложнее, чем это; Код umbraco.UmbracoDefault находится в umbraco.dll, и вам нужно будет переключиться на наследование с частичного класса и вам нужно знать, как работает жизненный цикл событий страницы - если вы новичок в этой области, тогда это будет сложно. Жизненный цикл страницы (http://msdn.microsoft.com/en-us/library/ms178472%28v=vs.100%29.aspx) должно быть местом, чтобы начать видеть, как вы можете перевести стандартный поток. – amelvin

+0

где разместить код в umbraco – aaviss

Смежные вопросы