ASP.NET отключает страницу mobile.master FriendlyURLs

Я хотел бы полностью отключить сайт Site.Mobile.Master. Мой сайт реагирует, и я хочу, чтобы мобильные браузеры использовали одну и ту же главную страницу.

Как я могу сделать это в дружественных URL-адресах ASP.NET

Спасибо

Ответы

Ответ 1

Удалите страницу Site.Mobile.Master и дружественные URL-адреса, просто используйте обычную страницу Site.Master.

Ответ 2

На самом деле, похоже, ошибка в текущей версии дружественных URL-адресов Web Forms (1.0.2), которая делает этот попытку доступ к site.mobile.master break с "The relative virtual path 'Site.Mobile.Master' is not allowed here." в дружественном URL-коде. Я просто был сожжен этим.

Чтобы исправить это, я использовал модифицированную версию кода http://www.davidwilhelmsson.com/disabling-mobile-master-pages-with-asp-net-friendly-urls/ - сначала создал класс resolver:

/// <summary>
/// This is a hack to force no mobile URL resolution in FriendlyUrls.  There 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());
    }

Ответ 3

Относительно странно, что нет простого способа избавиться от мобильной главной страницы. Если я удалю 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);

Ответ 4

Когда я удалил Site.Mobil.Master, страницы были сломаны. Так... Я предпочитаю только что установленный в Site.Mobile.Master установить информацию о Site.Master

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

его не самый лучший вариант (LOL), но Solved!

Ответ 6

Мне удалось решить эту проблему, изменив следующее:

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) Это не сработало, пока я не удалил весь каталог и не опубликовал его. Я думаю, что удаление некоторых определенных файлов также может помочь. Но так как у меня не было такой среды, я пошел проще.

Ответ 7

Я решил просто добавить в конце "Page_Load" событие "ViewSwitcher.ascx" перенаправление, сохраненное по умолчанию:   Response.Redirect(URL) Таким образом, sub приводит к:

Защищенный Sub Page_Load (отправитель как объект, e As EventArgs)          "Определить реальность         Dim isMobile = WebFormsFriendlyUrlResolver.IsMobileView(новый HttpContextWrapper (контекст))         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

Ответ 8

Мне было проще просто удалить (или переименовать) Site.Mobile.Master и ViewSwitcher.ascx. Кажется, это работает для меня отлично.