2013-12-19 29 views

答えて

13

はSite.Mobile.Masterページを削除し、フレンドリーなURLは、だけではなく、通常のSite.Masterページを使用します。

2

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

分離コード= "Site.Master.cs" 継承= "App.SiteMaster"

を設定しました最高のオプション(LOL)、しかし解決!

+0

これは私のために働いた唯一のものです。ばかばかしい。 Site.Mobile.MasterのすべてをSite.Masterファイルに置き換えました。ただし、上記のように更新した行1(<%@ Master .....%>)は例外です。 – Marcus

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); 
+0

完璧に動作します!ありがとう@tslin –

+0

ありがとうございます。これは実際に動作するように働いた – psj01

9

実際に、これはフレンドリーURLコードで"The relative virtual path 'Site.Mobile.Master' is not allowed here."site.mobile.masterブレークへのアクセスを試みた可能Webフォームの現在のバージョンフレンドリーなURL(1.0.2)のバグがあるようです。私はちょうどこれによって燃えた。

はそれを修正するために、私はhttp://www.davidwilhelmsson.com/disabling-mobile-master-pages-with-asp-net-friendly-urls/で、コードの修正バージョンを使用 - 第1レゾルバクラス作っ:その後、

/// <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()); 
    } 
+0

カスタムリゾルバクラスはどこに配置しましたか? – MC9000

+0

私は質問を理解しているかわからない。リゾルバクラスはプロジェクトの単なるクラスであり、図示のように 'App_Start'の標準の' RouteConfig'に標準で登録されています。 'RouteConfig'は' Global.asax.cs'から呼び出されます。 –

+0

私はApp_Startに入れてしまいました – MC9000

0

があります記事私はこの問題を解決するために書いています。ご参照ください。

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

TrySetMobileMasterPage()はデフォルトのVS Webプロジェクトのどこにも見つかりません。 VS2013にはこれとは別の方法がありますか? – MC9000

+0

私はそれがMicrosoft.AspNet.FriendlyUrls.dllに埋め込まれていることを発見しました 私はMSがそのソースコードを提供しないと思います(実際には必要ではありません) – MC9000

0

Iは、以下の変更により、この問題を解決するために管理:

1)I削除mobile.master Iは

をfolowingにViewSwitcher.ascx.csでコードを変更

2)

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

0

デフォルトで保存されているリダイレクトを「ViewSwitcher.ascx」の「Page_Load」イベントの最後に追加するだけで解決しました。 レスポンス。リダイレクト(URL)で だから、サブ結果:

保護されたサブをPage_Load(オブジェクトとして送信者、EventArgsのようE) 「Determinar・ラ・ビスタ実際 薄暗いisMobile = WebFormsFriendlyUrlResolver.IsMobileView(新HttpContextWrapper(コンテキスト)) CurrentView = IF(isMobile、 "モバイル"、 "デスクトップ")

' 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

私はそれが簡単だけ削除(または名前変更)することが分かっSite.Mobile.MasterとViewSwitcher.ascx。これは私のためにうまくいくように思えました。