页面重定向而不更改URL-Umbraco | C#

时间:2013-04-22 10:17:27

标签: c# asp.net umbraco umbraco5 umbraco-blog

我在Umbraco有两个模板。一个用于桌面,另一个用于移动我有一个小脚本,可以检测请求的用户代理并相应地重定向用户。

如果请求来自桌面,则会将用户重定向到包含网址www.abc.com的桌面模板。

如果通过移动设备发出请求,则会将用户重定向到包含网址www.abc.com/?alttemplate=mobilehomepage的移动模板

如何为桌面设备和移动设备设置相同的网址。

我正在使用Response.Redirect进行重定向。

提前致谢。

2 个答案:

答案 0 :(得分:5)

所有umbraco模板决策都通过default.aspx(.cs)运行,并且以编程方式可以通过覆盖Page PreInit方法来更改模板。

所以这就是我在default.aspx.cs文件中使用templatenameMobile,templatenameDesktop& amp; 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;
        }
    }

答案 1 :(得分:2)

您可以尝试使用UrlRewriting。它被包含在Umbraco中。尝试使用config \ UrlRewriting.config

以下是文档:

http://www.urlrewriting.net/160/en/documentation/documentation/documentation/documentation/documentation/documentation.html