2

ASPNET.MVC4 RC を使用して Web サイトを作成しました。ビューごとに、デスクトップ ビューとモバイル ビューを表す index.cshtml と index.Mobile.cshtml のような 2 つのファイルを作成しました。箱から出してすぐにすべて正常に動作します。モバイル デバイスはモバイル ビューを取得し、非モバイル デバイスは完全なデスクトップ ビューを取得します。ただし、デスクトップ ビューをモバイル デバイスに強制しようとすると問題が発生します (つまり、ユーザーが「フル サイト」リンクをクリックしたとき)。ビューは変更されず、モバイル ビューは引き続きレンダリングされます。次のコードを使用してブラウザーをオーバーライドします (グローバルフィルターから呼び出されます):

  filterContext.RequestContext.HttpContext.SetOverriddenBrowser(BrowserOverride.Desktop);

この呼び出しの結果として、.ASPXBrowserOverride=[Mozilla%2f4.0+(compatible%3b+MSIE+6.1%3b+Windows+XP)] という Cookie が設定されていることがわかりますが、明らかに何らかの理由で無視されます。デスクトップ ブラウザでのモバイル ビューの強制は正常に機能します。つまり、その逆です。どんな助けでも大歓迎です。

ありがとう。

4

3 に答える 3

2

このソリューションは正常に機能します。

コントローラ:

public class ViewSwitcherController : Controller
{
    //
    // GET: /ViewSwitcher/
    public RedirectResult SwitchView(bool mobile, string returnUrl)
    {
        if (Request.Browser.IsMobileDevice == mobile)
        {
            HttpContext.ClearOverriddenBrowser();
        }
        else
        {
            HttpContext.SetOverriddenBrowser(mobile ? BrowserOverride.Mobile : BrowserOverride.Desktop);
        }
        return Redirect(returnUrl);
    }
}

意見:

<% if (ViewContext.HttpContext.GetOverriddenBrowser().IsMobileDevice)
   {%>
  <%= Html.ActionLink("Desktop - Version", "SwitchView", "ViewSwitcher", 
      new {  mobile = false, returnUrl = Request.Url.PathAndQuery }, 
      new {  target = "_self" })%>
 <% }
    else
    {%>
  <%= Html.ActionLink("Mobile - Version", "SwitchView", "ViewSwitcher", 
      new { mobile = true, returnUrl = Request.Url.PathAndQuery }, 
      new {  target = "_self" })%>
 <%}%>
于 2012-08-21T16:47:14.707 に答える
0

すでに試したことや、Web サイトのデザインに使用しているものについて述べていないので、jquery mobile をインストールして (Nuget から入手できます)、自動的にインストールされるビュー スイッチャーを確認することをお勧めします。それがどのようにそれを行うかを見てください。それは良い出発点になるはずです

于 2012-07-25T08:54:56.843 に答える