【问题标题】:ASP.NET turn off FriendlyURLs mobile.master pageASP.NET 关闭 FriendlyURLs mobile.master 页面
【发布时间】:2014-01-07 19:08:43
【问题描述】:

我想完全关闭 Site.Mobile.Master 页面。我的网站是响应式的,我希望移动浏览器使用相同的母版页。

如何在 ASP.NET 友好的 URL 中做到这一点

谢谢

【问题讨论】:

    标签: asp.net friendly-url


    【解决方案1】:

    我发现删除(或重命名)Site.Mobile.Master 和 ViewSwitcher.ascx 更容易。这对我来说似乎工作得很好。

    【讨论】:

      【解决方案2】:

      我解决了这个问题,只需在“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
      

      【讨论】:

        【解决方案3】:

        我通过更改以下内容设法解决了这个问题:

        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) 这不起作用,直到我删除了整个目录并重新发布它。我认为,删除一些特定文件也可能会有所帮助。但是因为我没有那种环境,所以我走的比较轻松。

        【讨论】:

          【解决方案4】:

          【讨论】:

          • 我在默认的 VS Web 项目中的任何地方都找不到 TrySetMobileMasterPage()。在 VS2013 中是否有不同的方法?
          • 我发现它隐藏在 Microsoft.AspNet.FriendlyUrls.dll 中,我想 MS 不会提供那个源代码(不是你真的需要它)
          【解决方案5】:

          在当前版本的 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 调用的。
          • 我最终把它放在了 App_Start 中
          • 这是我可以真正删除 Site.Mobile.Master 的唯一解决方案。谢谢!
          【解决方案6】:

          很难摆脱移动母版页,这真是太奇怪了。如果我删除 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);
          

          【讨论】:

            【解决方案7】:

            当我删除 Site.Mobil.Master 时,页面已损坏。 所以... 我更喜欢在 Site.Mobile.Master 中设置 Site.Master 的信息

            CodeBehind="Site.Master.cs" Inherits="App.SiteMaster"

            这不是最好的选择(LOL),但解决了!

            【讨论】:

            • 这是唯一对我有用的东西。荒谬的。用我的 Site.Master 文件替换了 Site.Mobile.Master 中的所有内容,除了我按照上面建议更新的第 1 行 ()。
            【解决方案8】:

            删除 Site.Mobile.Master 页面,友好 URL 将只使用常规 Site.Master 页面。

            【讨论】:

            • 截至 2021 年 3 月,此答案并非在所有情况下都有效。请参阅 MikeBaz 的答案以获得更清洁的解决方案。
            猜你喜欢
            • 2014-02-21
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2012-06-26
            • 1970-01-01
            • 2019-03-03
            • 2011-09-14
            相关资源
            最近更新 更多