Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如果设备在asp.net web表单应用中是移动的,请更改母版页_Asp.net_Mobile_Master Pages - Fatal编程技术网

如果设备在asp.net web表单应用中是移动的,请更改母版页

如果设备在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

在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
是用于获取路由关联的帮助器类。如果您想启用友好的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" %>