2015-05-13 17 views
5

Buduję mobilne widoki strony asp.net MVC4 i napotkałem problem. Mamy sporo miejsc, w których mamy metodę przekonwertowania widoku na ciąg, ale ta metoda nie działa z displaymodes, dlatego zawsze znajduje domyślny widok. Na przykład. index.cshtml zamiast index.mobile.cshtml.MVC4 RenderViewToString nie respektuje mobilnych wyświetleń

Jakieś pomysły na to, czego brakuje, aby ten kod był zgodny z mobilnymi trybami wyświetlania?

public string RenderViewToString(string viewName, object model) 
    { 
     ViewData.Model = model; 
     using (var sw = new StringWriter()) 
     { 
      var viewResult = ViewEngines.Engines.FindPartialView(ControllerContext, viewName); 

      if (viewResult.View == null) 
      { 
       var message = String.Format("View '{0}' not found. Searched in the following locations {1}.", 
        viewName, String.Join(", ", viewResult.SearchedLocations)); 
       throw new Exception(message); 
      } 

      var viewContext = new ViewContext(ControllerContext, viewResult.View, ViewData, TempData, sw); 
      viewResult.View.Render(viewContext, sw); 
      viewResult.ViewEngine.ReleaseView(ControllerContext, viewResult.View); 
      return stripWhitespaceRx.Replace(sw.GetStringBuilder().ToString(), " ").Trim(); 
     } 
    } 
+0

Musisz przekazać wyraźny argument do wyświetlania widoków mobilnych, nie wie, że jest mobilny, czy nie. – marko

+0

Wyobraziłem sobie tyle, ale nie wiem, gdzie przekazać tę argumentację. Jak dotąd najlepszym rozwiązaniem jest, aby w widoku nazwa upewnić się, że najpierw spróbuję znaleźć wersję mobilną, a następnie wrócić do wartości domyślnej, jeśli nic nie zostanie znalezione. Ale nie czuję się dobrze. –

+0

Musisz stworzyć coś przed wywołaniem metody powyżej, nazwa widoku powinna być mobilna lub w obiekcie (jeśli jest to viewmodel lub coś stworzyć własność może nazywać się IsMobile i zależnie od tego, czy to urządzenie mobilne zachowuje się odpowiednio). – marko

Odpowiedz

0

Zainicjuj parametr "viewName" z oczekiwanym widokiem.

Na przykład przed wywołaniem RenderViewToString określ AGENT UŻYTKOWNIKA oparty na viewName obiektu Request.

if(Request.Browser.IsMobileDevice) 
{ 
    viewName = "~/Views/index.mobile.cshtml"; 
} 
else 
{ 
    viewName = "~/Views/index.cshtml"; 
} 
Powiązane problemy