MVC4 ASP.NET Mobile联系人表单重定向

时间:2014-01-14 10:02:58

标签: c# asp.net asp.net-mvc asp.net-mvc-4

我正在尝试让我的网站移动设备准备就绪。我是通过创建一个名为Index.Phone的重复索引页面来实现的。进行得顺利。除了使用移动设备提交联系人页面时,大多数事情都被正确检测到。提交联系表单后,我正在尝试重定向到感谢页面。我可以用桌面做到这一点没有任何问题。当我使用Mobile进行操作时,它会重定向到我的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";

}

感谢您给我的任何帮助。我省略了两个文件的正文以保持简单。

3 个答案:

答案 0 :(得分:0)

你可以做的只是根据@screen大小调整你的css条件,或者你可以通过浏览器。你必须以某种方式创建一个条件来检查你有什么类型的浏览器来呈现特定的视图,所以我会尝试通过css检查我正在使用的设备/浏览器类型

答案 1 :(得分:0)

我不能保证这是修复,但是......

MVC 4 RC和RTM中存在一个错误,导致视图缓存引擎出现问题。约15分钟后,DefaultDisplayMode将被忽略。在此处阅读更多相关信息:http://blogs.msdn.com/b/rickandy/archive/2012/09/17/asp-net-mvc-4-mobile-caching-bug-fixed.aspx

您需要确保安装此Nuget软件包的1.0.1版以修复此错误:http://www.nuget.org/packages/Microsoft.AspNet.Mvc.FixedDisplayModes/1.0.1

您可以使用程序包管理器控制台执行此操作并运行:

Install-Package Microsoft.AspNet.Mvc.FixedDisplayModes -Version 1.0.1

答案 2 :(得分:0)

基本上就是问题解决了。谢谢。

public ActionResult EmailSent() { return View(); }        

    [HttpPost]
    public ActionResult Contact(ContactModel pContactModel)
    {
        if (ModelState.IsValid)
        {        
            bool myBool = SendEmail(pContactModel);
            if (myBool == false)
            {
                TempData["emailSent"] = "false";
                if (Request.Browser.IsMobileDevice) { return View("Index.Phone"); } 
                else { return RedirectToAction("Contact"); }
            }
            else
            {
                if (Request.Browser.IsMobileDevice) { return View("EmailSent.Phone"); } 
                else { return RedirectToAction("EmailSent"); }
            }
        }
        else
        {
            if (Request.Browser.IsMobileDevice) { return View("Index.Phone"); }
        }

        return View();
    }