6

タブレットとモバイルで別々のビューを作成しようとしています。app_startにこのコードがあります

DisplayModeProvider.Instance.Modes.Insert(0, new
        DefaultDisplayMode("Tablet")
        {
            ContextCondition = (ctx =>
            ctx.Request.UserAgent.IndexOf("iPad", StringComparison.OrdinalIgnoreCase) >= 0 ||
            ctx.Request.UserAgent.IndexOf("Android", StringComparison.OrdinalIgnoreCase) >= 0)
        });

モバイル用とタブレット用の2つのレイアウトファイルを作成しました。しかし、Android上にあるモバイルデバイスからアクセスしているときに競合が発生します。それは私をlayout.tabletにリダイレクトします。これら2つのデバイスをどのように分離できますか?

4

4 に答える 4

8

私はこれをブラウザのユーザーエージェントスイッチャーでテストしましたが、正常に動作します。

DisplayModeProvider.Instance.Modes.Insert(0, new
        DefaultDisplayMode("Tablet")
        {
            ContextCondition = (ctx =>
            ctx.Request.UserAgent.IndexOf("iPad", StringComparison.OrdinalIgnoreCase) >= 0 ||
            ctx.Request.UserAgent.IndexOf("Android", StringComparison.OrdinalIgnoreCase) >= 0 && 
            ctx.Request.UserAgent.IndexOf("mobile", StringComparison.OrdinalIgnoreCase) < 1)
        });

        DisplayModeProvider.Instance.Modes.Insert(1, new DefaultDisplayMode("Mobile")
        {
            ContextCondition = (ctx =>
                ctx.GetOverriddenBrowser().IsMobileDevice)
        });
于 2012-07-20T07:58:03.807 に答える
1

ネオウィニアン、

ロジックのスニペットを1つ追加してみてください。

&& ctx.Request.UserAgent.IndexOf("mobile", StringComparison.OrdinalIgnoreCase) < 0

これにより、タブレット用のDisplayModeからすべてのモバイルデバイスが除外されます。

DisplayModeProvider.Instance.Modes.Insert(0, new DefaultDisplayMode("Tablet")
{
    ContextCondition = (ctx =>
     (ctx.Request.UserAgent.IndexOf("iPad", StringComparison.OrdinalIgnoreCase) >=0 
       || ctx.Request.UserAgent.IndexOf("Android", StringComparison.OrdinalIgnoreCase) >= 0) 
       && ctx.Request.UserAgent.IndexOf("mobile", StringComparison.OrdinalIgnoreCase) < 0)
});

さらに、あなたは見ることができます:

DisplayModeProvider.Instance.Modes.Insert(1, new DefaultDisplayMode("Mobile")
{
    ContextCondition = (ctx =>
        ctx.GetOverriddenBrowser().IsMobileDevice)
});
于 2012-07-18T12:03:23.173 に答える
0

http://51degrees.mobiのような、すべてのユーザーエージェント/デバイスの重労働を行うサービスを見たことがありますか?無料ではありませんが、「IsTablet」がプレミアムバージョンに含まれていることに気づきましたが、必要なものをたくさん提供する「ライト」バージョンを提供しています。

于 2012-07-18T12:15:41.717 に答える
0

51Degreesの無料のクラウドベースのソリューションを使用して、さまざまなデバイスタイプを検出できます。IsMobileプロパティとIsTabletプロパティを使用すると、結果に応じてリダイレクトできます。Webサイトから無料のクラウド製品を入手し、無料のクラウドキーを入手できます。APIの使用方法については、こちらのチュートリアルをご覧ください。https://51degrees.com/Developers/Documentation/APIs/Cloud-API/NET-Cloud

たとえば、以下に示すようなデバイスタイプを返すように要求し、応答に基づいてリダイレクトロジックを配置できます。

@using (var webClient = new System.Net.WebClient())
{
  string json = webClient.DownloadString(String.Format(
  "https://cloud.51degrees.com/api/v1/{0}/match?user-agent=
{1}&values=DeviceType",
  "YOUR KEY HERE",
  HttpUtility.UrlEncode(Request.UserAgent)));

dynamic match = Newtonsoft.Json.Linq.JObject.Parse(json);
  SortedList<string, string[]> values = Newtonsoft.Json.JsonConvert.DeserializeObject<SortedList<string, string[]>>(match.Values.ToString());
  string[] hvValues;

 if (values.TryGetValue("DeviceType", out hvValues))
  {
foreach (string s in hvValues)
{
<h4>
    Device Type:
    @s
</h4>
}
  }

開示:私は51度で働いています。

于 2017-04-12T11:00:51.370 に答える