Я бы рекомендовал взглянуть на это сообщение в блоге (если вы не хотите / не можете использовать MVC 4): http://brockallen.com/2012/05/24/mobile-support-in-mvc-3/.
Там Брок Аллен объясняет, как заставить мобильную / немобильную функцию работать в MVC 3 с помощью фильтра действий.
По сути, вы создаете следующий класс (при условии, что вы пишете на C #):
public class MobileAttribute : ActionFilterAttribute
{
public override void OnResultExecuting(ResultExecutingContext filterContext)
{
// is the request a view and is the client device a mobile device
var vr = filterContext.Result as ViewResult;
if (vr != null &&
filterContext.HttpContext.Request.Browser.IsMobileDevice)
{
// determine from the current view what the mobile view name would be
var viewName = vr.ViewName;
if (String.IsNullOrWhiteSpace(viewName)) viewName = (string)filterContext.RouteData.Values["action"];
var fileExtension = Path.GetExtension(viewName);
var mobileViewName = Path.ChangeExtension(viewName, "Mobile" + fileExtension);
// ask MVC is we have that view
var ver = ViewEngines.Engines.FindView(filterContext, mobileViewName, vr.MasterName);
if (ver != null && ver.View != null)
{
ver.ViewEngine.ReleaseView(filterContext, ver.View);
// we do, so tell MVC to use the mobile view instead
vr.ViewName = mobileViewName;
}
}
}
}
И после этого вы просто добавляете [Mobile]
ко всем контроллерам, которые также имеют мобильное представление:
[Mobile]
public class HomeController : Controller
{
public ActionResult Index()
{
return View();
}
}
Теперь вы можете иметь отдельные представления для компьютеров и мобильных устройств:
Компьютер: Views/Home/Index.cshtml
Моб. Телефон: Views/Home/Index.Mobile.cshtml
И это все, что вам нужно сделать. Теперь MVC будет автоматически показывать Index.Mobile.cshtml
для мобильных устройств и Index.cshtml
для компьютеров.