如果设备在asp.net web表单应用中是移动的,请更改母版页
在Visual Studio 2012中创建新的asp.net项目时,会添加一个ascx,其中包含以下代码:如果设备在asp.net web表单应用中是移动的,请更改母版页,asp.net,mobile,master-pages,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 Al
// 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
是用于获取路由关联的帮助器类。如果您想启用友好的URL,例如www.yourdomain.com/myaccount,可以使用它。aspx
可以显示为www.yourdomain.com/Account
您不需要使用此功能(针对您的特定问题),但是它是asp.net的一个很酷的功能,并且通过在RouteTables中创建自定义路由变得很容易
由斯科特帮助我了解友好的网址
现在,请解决您的问题,更改移动设备的母版页。母版页只能在页面的pre-init事件中更改。我不知道在那之后注入新母版页的其他方法,因为我认为已经太晚了
当你有很多页面时,勾住这个
下面是一个伪代码,需要根据您的需要进行改进
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";
}
}
}
一旦您了解了这一点,请确保您阅读了此解决方案,其中提到为移动设备构建母版页要在移动和桌面版本之间切换,您必须在页面开头包含以下代码:
<%@ Register Src="~/ViewSwitcher.ascx" TagPrefix="friendlyUrls" TagName="ViewSwitcher" %>
最后一个提示<代码>视图切换器自动更改me.MasterPageFile
。例如,如果您的表单使用母版页“~/MyMasterPage.Master”
库将搜索“~/MyMasterPage.Mobile.Master”
;如果文件存在,库将自动将表单母版页替换为:“~/MyMasterPage.Mobile.master”
请注意,您的主页文件必须使用绝对地址。这是有效的:“~/MyMasterpage.Master”
,这将显示从库中生成的错误消息:“MyMasterpage.Master”
不建议基于UA嗅探切换母版页。唯一实用的解决方案是利用RWD(建议使用Bootstrap 3.x)。所以,最好的方法是从空的ASPNET项目模板开始,只添加有意义的内容。我想知道如果我添加第二对母版页(桌面和手机),这将如何工作。我需要做什么才能让它工作。ViewSwitcher类如何知道特定的mobile.master是桌面母版页2而不是桌面母版页1的替代品。只是名字吗?
<friendlyUrls:ViewSwitcher ID="ViewSwitcher1" runat="server" />
Protected Sub Page_Load(sender As Object, e As EventArgs) Handles MyBase.Load
' Determine current view
Dim isMobile = WebFormsFriendlyUrlResolver.IsMobileView(New HttpContextWrapper(Context))
CurrentView = If(isMobile, "Mobile", "Desktop")
' Determine alternate view
AlternateView = If(isMobile, "Desktop", "Mobile")
Dim strSwitchViewRouteName As String = "AspNet.FriendlyUrls.SwitchView"
Dim SwitchViewRoute = RouteTable.Routes(strSwitchViewRouteName)
If SwitchViewRoute Is Nothing Then
' Friendly URLs is not enabled or the name of the switch view route is out of sync
Me.Visible = False
Return
End If
' Create switch URL from the route, e.g. ~/__FriendlyUrls_SwitchView/Mobile?ReturnUrl=/Page
Dim url = GetRouteUrl(strSwitchViewRouteName, New With { _
Key .view = AlternateView, .__FriendlyUrls_SwitchViews = True _
})
url += "?ReturnUrl=" & HttpUtility.UrlEncode(Request.RawUrl)
SwitchUrl = url
End Sub
<%@ Page Title="Home Page" Language="VB" MasterPageFile="~/MyMasterpage.Master" AutoEventWireup="true" CodeBehind="Default.aspx.vb" nherits="Test._Default" %>