0

Web サイトで、同じ ASP.NET MVC インスタンスからモバイル バージョンとデスクトップ バージョンを提供したいと考えています。

2 つのホスト名があります。

http://m.sitename.com & http://www.sitename.com

モジュール化を維持したいと考えています。つまり、モバイル サイト用に (ビューを分割するだけでなく) 完全に別個のコントローラーを使用することを意味します。クラス名の重複の問題を避けるために、すべてのモバイル コントローラーに「M」というプレフィックスを付けて喜んで名前を付けます。IE:

MAccountController.cs
AccountController.cs

m.sitename.com/account/xではなく、モバイル用の URLを維持したいと思います/maccount/x 。私の見方では、これを適切に処理するには 2 つの方法があります。

オプション1:

すべてのモバイル リンクは/maccount/xフォーマットになりますが、(URL 内の) 表示名は/account/x

また:

オプション 2:

どういうわけか、モバイルコントローラーはフォーマット付きのリクエストにのみ応答するように設定http://m.sitename.comし、デスクトップコントローラーはhttp://www.sitename.comフォーマットのみに応答するように設定しました。

オプション 2a。サブキャッシング IE を使用するAccountController : DesktopController/MobileController か、

オプション 2b。Controller クラス自体のある種の属性/プロパティ。

オプション1または2のいずれかが可能ですか? 一方が他方より優れているか?これを行うより良い方法はありますか?

4

1 に答える 1

1

DisplayModeより良い方法です。これは非常に柔軟だからです。iPhone で Web ページが異なる場合があります。しかし、オプション1,2ではそれができません。DisplayMode の使用法について:

あなたの通常の見方は

/Views/Home/Default.aspx  //or Default.cshtml

モバイルビューは

/View/Home/Default.mobile.aspx  // or Default.mobile.cshtml

でもルートは同じ。

どうやってするの。初め。Global.asax に DisplayModePrivider を挿入する

DisplayModeProvider.Instance.Modes.Insert(0, new
DefaultDisplayMode("iPhone")
{
    ContextCondition = (context => context.GetOverriddenUserAgent().IndexOf
        ("iPhone", StringComparison.OrdinalIgnoreCase) >= 0)
 });

2番。このように使う

/View/Home/Default.iphone.aspx

違うルートが欲しい場合。これは多分あなたを助ける

于 2013-02-04T01:27:52.517 に答える