Site.Mobile.Masterページを完全にオフにしたいのですが。私のサイトはレスポンシブで、モバイルブラウザで同じマスターページを使用したいと思っています。
ASP.NETに適したURLでこれを行うにはどうすればよいですか
ありがとう
Site.Mobile.Masterページを削除すると、FriendlyURLは代わりに通常のSite.Masterページを使用します。
実際には、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());
}
モバイルマスターページを取り除く簡単な方法がないのは、とても奇妙なことです。 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);
Site.Mobil.Masterを削除すると、ページが壊れていました。だから...私はSite.Mobile.Masterに設定することを好みますSite.Masterの情報を設定します
CodeBehind = "Site.Master.cs" Inherits = "App.SiteMaster"
それは最良の選択肢(LOL)ではありませんが、解決しました!
以下を変更することで、この問題を解決することができました。
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)ディレクトリ全体を削除して再公開するまで、これは機能しませんでした。特定のファイルをいくつか削除することも役立つと思います。でも、そういう環境がなかったので、もっと楽になりました。
Site.Mobile.MasterとViewSwitcher.ascxを削除(または名前変更)する方が簡単であることがわかりました。これは私にとってはうまく機能しているようでした。
「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