web-dev-qa-db-ja.com

ASP.NETはFriendlyURLsmobile.masterページをオフにします

Site.Mobile.Masterページを完全にオフにしたいのですが。私のサイトはレスポンシブで、モバイルブラウザで同じマスターページを使用したいと思っています。

ASP.NETに適したURLでこれを行うにはどうすればよいですか

ありがとう

18
Piotr Stulinski

Site.Mobile.Masterページを削除すると、FriendlyURLは代わりに通常のSite.Masterページを使用します。

13
Levi

実際には、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());
    }
11
MikeBaz - MSFT

モバイルマスターページを取り除く簡単な方法がないのは、とても奇妙なことです。 Site.Mobile.Master.masterを削除すると、「ファイル '/Site.Mobile.Master'が存在しません」というエラーで終了しました。

この問題を解決するために私がしたことは、Site.Mobile.Master.csPage_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
tslin

Site.Mobil.Masterを削除すると、ページが壊れていました。だから...私はSite.Mobile.Masterに設定することを好みますSite.Masterの情報を設定します

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

それは最良の選択肢(LOL)ではありませんが、解決しました!

2
user3674308

以下を変更することで、この問題を解決することができました。

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)ディレクトリ全体を削除して再公開するまで、これは機能しませんでした。特定のファイルをいくつか削除することも役立つと思います。でも、そういう環境がなかったので、もっと楽になりました。

1
Taurib

これは私がこの問題を修正するために書いた記事です。ご参照ください。

http://www.icodefor.net/2015/06/fixes-for-the-issue-the-relative-virtual-path-site.mobile.master-is-not-allowed-here-in- asp.net-friendly-urls.html

0
Tapan kumar

Site.Mobile.MasterとViewSwitcher.ascxを削除(または名前変更)する方が簡単であることがわかりました。これは私にとってはうまく機能しているようでした。

0
Quilnux

「ViewSwitcher.ascx」の「Page_Load」イベントの最後に、デフォルトで保存されているリダイレクトを追加するだけで解決しました。Response.Redirect(url)したがって、サブの結果は次のようになります。

Protected Sub Page_Load(sender As Object、e As EventArgs) 'Determinar la Vista actual Dim 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
0
Aurelio Jaraiz