【发布时间】:2014-01-07 19:08:43
【问题描述】:
我想完全关闭 Site.Mobile.Master 页面。我的网站是响应式的,我希望移动浏览器使用相同的母版页。
如何在 ASP.NET 友好的 URL 中做到这一点
谢谢
【问题讨论】:
标签: asp.net friendly-url
我想完全关闭 Site.Mobile.Master 页面。我的网站是响应式的,我希望移动浏览器使用相同的母版页。
如何在 ASP.NET 友好的 URL 中做到这一点
谢谢
【问题讨论】:
标签: asp.net friendly-url
我发现删除(或重命名)Site.Mobile.Master 和 ViewSwitcher.ascx 更容易。这对我来说似乎工作得很好。
【讨论】:
我解决了这个问题,只需在“ViewSwitcher.ascx”的“Page_Load”事件末尾添加默认保存的重定向: 响应。重定向(网址) 所以子结果是:
Protected Sub Page_Load(sender As Object, e As EventArgs) ' Determinar la vista 实际 暗淡 isMobile = WebFormsFriendlyUrlResolver.IsMobileView(New HttpContextWrapper(Context)) CurrentView = If(isMobile, "Mobile", "Desktop")
' Determinar la vista alternativa AlternateView = If(isMobile, "Desktop", "Mobile") ' Create URL de conmutador a partir de la ruta, p. ej. ~/__FriendlyUrls_SwitchView/Mobile?ReturnUrl=/Page Dim switchViewRouteName = "AspNet.FriendlyUrls.SwitchView" Dim switchViewRoute = RouteTable.Routes(switchViewRouteName) If switchViewRoute Is Nothing Then ' Las URL descriptivas no están habilitadas o el nombre de la ruta de la vista del conmutador no está sincronizado Me.Visible = False Return End If Dim url = GetRouteUrl(switchViewRouteName, New With { .view = AlternateView, .__FriendlyUrls_SwitchViews = True }) url += "?ReturnUrl=" & HttpUtility.UrlEncode(Request.RawUrl) SwitchUrl = url **Response.Redirect(url)** End Sub
【讨论】:
我通过更改以下内容设法解决了这个问题:
1) 我删除了 mobile.master
2) 我将 ViewSwitcher.ascx.cs 中的代码更改为以下代码
protected void Page_Load(object sender, EventArgs e)
{
CurrentView = "Desktop";
AlternateView = "Desktop";
// 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 switch view route is out of sync
this.Visible = false;
return;
}
var url = GetRouteUrl(switchViewRouteName, new { view = AlternateView, __FriendlyUrls_SwitchViews = true });
url += "?ReturnUrl=" + HttpUtility.UrlEncode(Request.RawUrl);
SwitchUrl = url;
}
3) 这不起作用,直到我删除了整个目录并重新发布它。我认为,删除一些特定文件也可能会有所帮助。但是因为我没有那种环境,所以我走的比较轻松。
【讨论】:
【讨论】:
在当前版本的 Web 表单友好 URL (1.0.2) 中实际上似乎存在一个错误,导致此尝试访问友好 URL 代码中的 site.mobile.master 中断与 "The relative virtual path 'Site.Mobile.Master' is not allowed here."。我只是被这个烧死了。
为了修复它,我在http://www.davidwilhelmsson.com/disabling-mobile-master-pages-with-asp-net-friendly-urls/ 使用了代码的修改版本 - 首先创建了一个解析器类:
/// <summary>
/// This is a hack to force no mobile URL resolution in FriendlyUrls. There's some kind of bug in the current version that
/// causes it to do an internal failed resolve of a mobile master even though there is none.
/// </summary>
public class BugFixFriendlyUrlResolver: Microsoft.AspNet.FriendlyUrls.Resolvers.WebFormsFriendlyUrlResolver {
protected override bool TrySetMobileMasterPage(HttpContextBase httpContext, Page page, string mobileSuffix) {
return false;
//return base.TrySetMobileMasterPage(httpContext, page, mobileSuffix);
}
}
然后在我的RouteConfig 类中使用它:
public static void RegisterRoutes(RouteCollection routes) {
var settings = new FriendlyUrlSettings();
settings.AutoRedirectMode = RedirectMode.Permanent;
routes.EnableFriendlyUrls(settings, new BugFixFriendlyUrlResolver());
}
【讨论】:
RouteConfig 中注册在App_Start 中,如图所示。 RouteConfig 是从 Global.asax.cs 调用的。
很难摆脱移动母版页,这真是太奇怪了。如果我删除 Site.Mobile.Master.master,我会以错误“文件 '/Site.Mobile.Master' 不存在”结束。
我为解决此问题所做的是将以下代码添加到 Site.Mobile.Master.cs Page_Load 事件中。
var AlternateView = "Desktop";
var switchViewRouteName = "AspNet.FriendlyUrls.SwitchView";
var url = GetRouteUrl(switchViewRouteName, new { view = AlternateView, __FriendlyUrls_SwitchViews = true });
url += "?ReturnUrl=" + HttpUtility.UrlEncode(Request.RawUrl);
Response.Redirect(url);
【讨论】:
当我删除 Site.Mobil.Master 时,页面已损坏。 所以... 我更喜欢在 Site.Mobile.Master 中设置 Site.Master 的信息
CodeBehind="Site.Master.cs" Inherits="App.SiteMaster"
这不是最好的选择(LOL),但解决了!
【讨论】:
删除 Site.Mobile.Master 页面,友好 URL 将只使用常规 Site.Master 页面。
【讨论】: