【发布时间】:2014-02-02 08:10:51
【问题描述】:
我正在尝试使我的网站准备好移动。我通过创建一个名为 Index.Phone 的重复索引页面来做到这一点。进行得顺利。除了我使用移动设备提交我的联系人页面时,大多数事情都会被正确检测到。提交联系表格后,我会尝试重定向到感谢页面。我可以用台式机做到这一点,没有任何问题。当我使用移动设备执行此操作时,它会重定向到我的 EmailSent.cshtml(桌面页面)而不是我的 EmailSent.Phone.cshtml。我相信这是由于来自控制器的重定向,而不是来自我认为会使用我已经整理好的 global.asax 的客户端的重定向。
这是被调用的 HomeController 动作。
public ActionResult Contact(ContactModel pContactModel)
{
if (ModelState.IsValid)
{
bool myBool = SendEmail(pContactModel);
if (myBool == false)
{
TempData["emailSent"] = "false";
return RedirectToAction("Contact");
}
else
{
return RedirectToAction("EmailSent");
}
}
return View();
}
这是我的桌面版 EmailSent.cshtml...
@{
Layout = "~/Views/Shared/_Layout.cshtml";
Page.Title = "desktop";
}
这是我尝试通过上述重定向调用的 EmailSent.Phone.cshtml。
@{
Layout = "../Shared/_Layout.Phone.cshtml";
Page.Title = "mobile";
}
感谢您给我的任何帮助。为了简单起见,我省略了两个文件的正文。
【问题讨论】:
-
您在哪里检查客户端是否是移动设备?你提到
global.asax,你做了什么? -
@greg84 他在 MVC 中使用 displayModes。
-
我已经注册了捆绑包,然后像这样手动设置 contextConditions...
var phone = new DefaultDisplayMode("Phone") { ContextCondition = ctx => ctx.GetOverriddenUserAgent() != null && ctx.GetOverriddenUserAgent().Contains("iPhone") }; -
因此,通常当我发出查看请求时,如果它是 iPhone,那么它将根据我的 global.asax contextCondition 传递正确的视图,然后从 url 中省略单词 phone。从控制器内部执行 RedirectRequest 时,我似乎无法让它遵循相同的程序。这就是我想要达到的目标。我相信这是因为我正在发出服务器请求而不是客户端请求。虽然我根本不是 MVC 专家。
标签: c# asp.net asp.net-mvc asp.net-mvc-4