当您在 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/