2014-01-14 25 views
0

我正在嘗試使我的網站移動就緒。我通過創建一個名爲Index.Phone的重複索引頁來完成此操作。進行得順利。除了使用手機提交我的聯繫人頁面時,大多數情況都可以正確檢測。一旦提交了聯繫表格,我正嘗試重定向到一個感謝頁面。我可以在沒有任何問題的情況下在桌面上執當我使用移動設備執行此操作時,它會重定向到我的EmailSent.cshtml(桌面頁面),而不是我的EmailSent.Phone.cshtml。我相信這是由於來自控制器的重定向,而不是來自我認爲會使用我已經整理出來的global.asax的客戶端。MVC4 ASP.NET移動聯繫表格重定向

這是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"; 

}

謝謝您給我任何幫助。爲了保持簡單,我省略了兩個文件的正文。

+0

你在哪裏檢查客戶端是否是移動設備?你提到'global.asax',你做了什麼? – greg84

+0

@ greg84他在MVC中使用displayModes。 –

+0

我已經註冊了捆綁包,然後手動設置contextConditions像這樣... var phone = new DefaultDisplayMode(「Phone」) { ContextCondition = ctx => ctx.GetOverriddenUserAgent()!= null && ctx.GetOverriddenUserAgent() 。載有(「iPhone」) };' – user3036965

回答

0

你可以做什麼只是讓你的CSS條件基礎上,@screen大小也可以通過瀏覽器去。你會以某種方式創造條件,以檢查你有爲了使特定視圖的瀏覽器類型,所以我會嘗試檢查我通過CSS工作是什麼類型的設備/瀏覽器的

+0

如果他想發送不同的HTML *到瀏覽器怎麼辦?不能用CSS做到這一點! – greg84

+0

@ greg84在這種情況下,他需要添加一個控制器來呈現該設備的頁面,但即使如此,您仍然需要檢查呈現該頁面的設備。 – chrisp54

+0

我只是試圖顯示一個除了徽標和路線回家之外並不需要太多內容的感謝頁面。所以也許只是所有設備的通用頁面,這是我會做的。雖然我想確定我在哪裏錯了。歡呼所有的幫助。所以global.asax不適用於控制器響應重定向?是這樣嗎? – user3036965

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來修復這個bug:http://www.nuget.org/packages/Microsoft.AspNet.Mvc.FixedDisplayModes/1.0.1

您可以使用軟件包管理器控制檯和運行做到這一點:

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

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(); 
    }