asp.net - 如果设备在 ASP.NET Web 表单应用程序中移动,则更改母版页

标签 asp.net mobile master-pages

当您在 Visual Studio 2012 中创建新的 asp.net 项目时,它会添加一个包含以下代码的 ascx:

// Determine current view

var isMobile = WebFormsFriendlyUrlResolver.IsMobileView(new HttpContextWrapper(Context));
CurrentView = isMobile ? "Mobile" : "Desktop";

// Determine alternate view
AlternateView = isMobile ? "Desktop" : "Mobile";

// Create switch URL from the route, e.g. ~/__FriendlyUrls_SwitchView/Mobile?ReturnUrl=/Page
var switchViewRouteName = "AspNet.FriendlyUrls.SwitchView";
var switchViewRoute = RouteTable.Routes[switchViewRouteName];
if (switchViewRoute == null)
{
     // Friendly URLs is not enabled or the name of the swith view route is out of sync
     this.Visible = false;
    return;
}
var url = GetRouteUrl(switchViewRouteName, new { view = AlternateView });
url += "?ReturnUrl=" + HttpUtility.UrlEncode(Request.RawUrl);
SwitchUrl = url;

我真的不明白这是如何工作的?这个奇怪的代码是什么?WebFormsFriendlyUrlResolver?我有一个现有项目,我想知道如果检测到移动浏览器是否可以切换母版页?

最佳答案

WebFormsFriendlyUrlResolver 是一个用于获取路由关联的辅助类。如果您想启用友好的网址,则可以使用它,即 www.yourdomain.com/myaccount.aspx 可以显示为 www.yourdomain.com/Account

您不需要使用它(针对您的具体问题),但它是 asp.net 的一个很酷的功能,并且通过在 RouteTables 中创建自定义路由可以轻松实现

This article Scott 的文章帮助我理解了友好的 URL

现在解决您的问题,更改移动设备的母版页。母版页只能在页面的预初始化事件中更改。我不知道此后注入(inject)新母版页的另一种方法,因为我认为为时已晚

当你有很多页面时,钩上这个handler to httpcontext

下面是一个伪代码,需要根据您的需求进行改进

void page_PreInit(object sender, EventArgs e)
    {
        Page p = this.Context.Handler as Page;
        if (p != null)
        {
            // set master page
            if(Request.Browser.IsMobileDevice){
              p.MasterPageFile = "~/MasterPages/mobile.master";
            }
            else{
               p.MasterPageFile = "~/MasterPages/normal.master";
            }

        }
    } 

一旦您弄清楚了这一点,请务必阅读此解决方案 at SO其中提到为移动设备构建母版页

关于asp.net - 如果设备在 ASP.NET Web 表单应用程序中移动,则更改母版页,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16811651/

相关文章:

android - 灵活的移动列表

javascript - 移动浏览器的“放大”选项

asp.net - 从内容页面在母版页上设置属性值

javascript - 在 UserControl 中使用 Jquery 和 MasterPage

android - 移动应用程序和 Web 服务数据传输(WCF 和 JSON)

.net - 如何设计结构相同的窗体?

asp.net - 混合 WebForms/ASP.NET MVC

c# - 做网站应该用什么形式

asp.net - Visual Studio 中的慢 "Find All References"

javascript - 高度未调整 LayerSlider 5