Ответ 1
Удалите страницу Site.Mobile.Master и дружественные URL-адреса, просто используйте обычную страницу Site.Master.
Я хотел бы полностью отключить сайт Site.Mobile.Master. Мой сайт реагирует, и я хочу, чтобы мобильные браузеры использовали одну и ту же главную страницу.
Как я могу сделать это в дружественных URL-адресах ASP.NET
Спасибо
Удалите страницу Site.Mobile.Master и дружественные URL-адреса, просто используйте обычную страницу Site.Master.
На самом деле, похоже, ошибка в текущей версии дружественных 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());
}
Относительно странно, что нет простого способа избавиться от мобильной главной страницы. Если я удалю 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);
Когда я удалил Site.Mobil.Master, страницы были сломаны. Так... Я предпочитаю только что установленный в Site.Mobile.Master установить информацию о Site.Master
CodeBehind = "Site.Master.cs" Inherits = "App.SiteMaster"
его не самый лучший вариант (LOL), но Solved!
Вот статья, которую я написал, чтобы исправить эту проблему. Пожалуйста, обратитесь.
Мне удалось решить эту проблему, изменив следующее:
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) Это не сработало, пока я не удалил весь каталог и не опубликовал его. Я думаю, что удаление некоторых определенных файлов также может помочь. Но так как у меня не было такой среды, я пошел проще.
Я решил просто добавить в конце "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
Мне было проще просто удалить (или переименовать) Site.Mobile.Master и ViewSwitcher.ascx. Кажется, это работает для меня отлично.