2013-12-19 4 views

Antwort

13

löschen Site.Mobile.Master Seite und freundliche URLs werden nur anstelle der regulären Site.Master Webseite.

2

Als ich Site.Mobil.Master gelöscht habe, war die Seite kaputt. So ... ich in Site.Mobile.Master gerade eingestellt lieber stellen Sie die Informationen von Site.Master

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

sein nicht die beste Option (LOL), aber gelöst!

+0

Das ist das einzige, was bei mir funktioniert hat. Lächerlich. Alles im Site.Mobile.Master wurde durch meine Site.Master-Datei ersetzt, mit Ausnahme von Zeile 1 (<% @ Master .....%>), die ich wie oben beschrieben aktualisiert habe. – Marcus

6

Es ist seltsam, dass es keine einfache Möglichkeit gibt, die mobile Masterseite loszuwerden. Wenn ich Site.Mobile.Master.master lösche, habe ich mit dem Fehler "Die Datei '/Site.Mobile.Master' existiert nicht" beendet.

Was ich getan habe, um dieses Problem zu beheben, war, dass ich die folgenden Codes in das Site.Mobile.Master.cs PageLoad-Ereignis eingefügt habe.

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

Perfekt funktioniert! Danke @tslin –

+0

Danke. das funktionierte, damit es tatsächlich funktioniert – psj01

9

Es scheint tatsächlich um einen Fehler in der aktuellen Version von Web Forms-freundlicher URLs (1.0.2) zu sein, die dieser Zugriff auf die site.mobile.master mit "The relative virtual path 'Site.Mobile.Master' is not allowed here." in der freundlichen URL Code Pause versuchten machen. Ich wurde gerade dadurch verbrannt.

es zu beheben, habe ich eine modifizierte Version des Codes bei http://www.davidwilhelmsson.com/disabling-mobile-master-pages-with-asp-net-friendly-urls/ - zunächst einen Resolver Klasse gemacht:

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

verwendet es dann in meiner RouteConfig Klasse:

public static void RegisterRoutes(RouteCollection routes) { 
     var settings = new FriendlyUrlSettings(); 
     settings.AutoRedirectMode = RedirectMode.Permanent; 
     routes.EnableFriendlyUrls(settings, new BugFixFriendlyUrlResolver()); 
    } 
+0

Wo haben Sie die benutzerdefinierte Resolver-Klasse platziert? – MC9000

+0

nicht sicher, ich verstehe die Frage. Die Resolver-Klasse ist nur eine Klasse im Projekt, die im Standard out of the box "RouteConfig" in "App_Start" wie gezeigt registriert ist. 'RouteConfig' wird von' Global.asax.cs' aufgerufen. –

+0

Ich landete es im App_Start – MC9000

0
+0

Ich kann TrySetMobileMasterPage() nirgends im Standard-VS-Webprojekt finden. Gibt es dafür in VS2013 eine andere Methode? – MC9000

+0

Ich fand es in der Microsoft.AspNet.FriendlyUrls.dll begraben Ich nehme an, MS wird diesen Quellcode nicht zur Verfügung stellen (nicht, dass Sie es tatsächlich brauchen) – MC9000

0

ich es geschafft, dieses Problem zu lösen, indem folgende:

1) Ich löschte mobile.master

2) Ich änderte Code bei ViewSwitcher.ascx.cs zu Folowing

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) Das hat nicht funktioniert, bis ich das ganze Verzeichnis gelöscht und neu veröffentlicht habe. Ich denke, das Löschen einiger spezifischer Dateien könnte ebenfalls hilfreich sein. Aber da ich diese Umgebung nicht hatte, ging ich leichter.

0

Ich löste es einfach am Ende des "Page Load" -Ereignis von "ViewSwitcher.ascx" hinzufügen die Umleitung standardmäßig gespeichert: Response.Redirect (url) So sind die Unter Ergebnisse in:

Protected Sub Page_Load (Absender als Gegenstand, e As EventArgs) 'deter la vista tatsächliche Dim isMobile = WebFormsFriendlyUrlResolver.IsMobileView (New HttpContextWrapper (Context)) Wenn Current = (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

ich fand es einfacher löschen sie einfach (oder umbenennen) Site.Mobile.Master und ViewSwitcher.ascx. Das schien mir gut zu gehen.