私は新しいASP.NET MVC 4モバイル機能を試しています。私はただ1つのコントローラ(HomeController)と1つのビュー(インデックス)で簡単なアプリケーションを作った。インデックスビューのモバイル版を追加しました。私はサムスンギャラクシーSとしてOpera Mobile Emulatorでアプリケーションを起動すると、デスクトップブラウザでアプリケーションを起動すると予想されるように定期的なビューが表示されASP.NET MVC 4モバイル機能
Views/Home/Index.cshtml
Views/Home/Index.Mobile.cshtml
は、しかし、私はまだ通常のビューではなく、モバイルバージョンを取得します。
エミュレータから送られたユーザーエージェント文字列は次のようになります。これが機能しない理由に
Opera/9.80 (Windows NT 6.1; Opera Mobi/23731; U; en) Presto/2.9.201 Version/11.50
任意のアイデア?私はこの問題を解決することができました@nemesvする
更新 おかげで、ここに私の現在のソリューションは、うまくいけば、それはほとんどのモバイルシナリオをカバーする、です。
public class MobileDisplayMode : DefaultDisplayMode
{
private readonly StringCollection _useragenStringPartialIdentifiers = new StringCollection
{
"Android",
"Mobile",
"Opera Mobi",
"Samsung",
"HTC",
"Nokia",
"Ericsson",
"SonyEricsson",
"iPhone"
};
public MobileDisplayMode() : base("Mobile")
{
ContextCondition = (context => IsMobile(context.GetOverriddenUserAgent()));
}
private bool IsMobile(string useragentString)
{
return _useragenStringPartialIdentifiers.Cast<string>()
.Any(val => useragentString.IndexOf(val, StringComparison.InvariantCultureIgnoreCase) >= 0);
}
}
そして私のGlobal.asax
DisplayModeProvider.Instance.Modes.Insert(0, new MobileDisplayMode());
命の恩人。チュートリアルでこれを言っていないというのは実際には愚かです。それはちょうどマイクロソフト側から半分のお尻を感じる。彼らは通常、彼らのチュートリアルをポイントしています。 –
おかげさまで、StringCollectionはこれまでにない無駄なクラスのようです。このコードサンプルでは何も提供していないだけでなく、パフォーマンスを向上させるだけでなく、使用するために余分なコード(キャスト)を記述する必要があります。それをリストに置き換えて、幸せに暮らしてから –
PandaWood