OK Я унаследовал этот код с помощью настраиваемого механизма просмотра. Все, что он делает, переопределяет FindView
, чтобы возвращать разные виды на основе устройства. В настоящее время iPad распознается как мобильное устройство, и, следовательно, отображается мобильный вид. Моя задача - изменить это на рабочий стол.Мастер-страница магически изменяется в ASP.NET MVC Custom View Engine
Имеются две основные страницы X.master
и X.Mobile.master
. Из кода видно, что он вручную добавляет .Mobile
к названию главной страницы для мобильных устройств. Все, что я сделал, это установить isMobile
на false
для iPad.
Проблема заключается в том, что даже если он идет к другому заявлению с masterName
быть X
(а не X.Mobile
), при просмотре с IPad, вид, который возвращается имеет X.Mobile.Master
в качестве своей главной страницы. Таким образом, для iPad он показывает рабочий стол с помощью Mobile Masterpage. Настольные и мобильные версии все в порядке. Где (и как) могло это случиться?
Метод выборки действия:
public ActionResult Index()
{
return View("Index", "X");
}
Вот упрощенная версия viewengine:
class MobileViewEngine : FixedWebFormViewEngine
{
public override ViewEngineResult FindView(
ControllerContext controllerContext,
string viewName,
string masterName,
bool useCache
)
{
ViewEngineResult result;
bool isMobile =
controllerContext.HttpContext.Request.Browser.IsMobileDevice;
if (isiPad(controllerContext.HttpContext.Request))
{
isMobile = false;
}
if (isMobile)
{
masterName = masterName + ".Mobile";
string viewPathAndName = "M/" + viewName;
//Mobile view retrieved from cache
result = base.FindView(
controllerContext,
viewPathAndName,
masterName,
true
);
if (result == null || result.View == null)
{
//Mobile view retrieved, no cache
result = base.FindView(
controllerContext,
viewPathAndName,
masterName,
false
);
}
}
else
{
//desktop view retrieved
result = base.FindView(
controllerContext,
viewName,
masterName,
false
);
}
}
}
Я бы искал вашу базу кода для других целей использования IsMobileDevice. –
Это, к сожалению, не привело ни к чему, что могло бы повлиять на эту проблему – Hossein