Pertanyaan ASP.NET MVC 4 Fitur Seluler


Saya mencoba fitur mobile ASP.NET MVC 4 yang baru. Saya membuat aplikasi sederhana hanya dengan satu kontroler (HomeController) dan satu tampilan (Indeks). Saya juga menambahkan versi seluler dari tampilan indeks.

Views/Home/Index.cshtml
Views/Home/Index.Mobile.cshtml

Saat meluncurkan aplikasi di browser desktop, tampilan reguler ditampilkan seperti yang diharapkan, namun ketika saya meluncurkan aplikasi di Opera Mobile Emulator sebagai Samsung Galaxy S, saya masih mendapatkan tampilan reguler dan bukan versi seluler.

string agen pengguna yang dikirim dari emulator terlihat seperti ini:

Opera/9.80 (Windows NT 6.1; Opera Mobi/23731; U; en) Presto/2.9.201 Version/11.50

Ada gagasan mengapa ini tidak berfungsi?

Memperbarui Terima kasih kepada @nemesv Saya dapat memecahkan masalah ini, inilah solusi saya saat ini, semoga ini akan mencakup sebagian besar skenario seluler.

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);
    }
}

Dan saya Global.asax

DisplayModeProvider.Instance.Modes.Insert(0, new MobileDisplayMode());

32
2018-03-08 08:11


asal


Jawaban:


ASP.Net (sebenarnya HttpBrowserCapabilitiesBase kelas) tidak mengenali Opera Mobile Emulator sebagai browser Seluler.

Anda dapat memeriksa ini dalam tindakan pengontrol apa pun: HttpContext.Request.Browser.IsMobileDevice  akan kembali false untuk browser Opera Mobile.

Karena built in DefaultDisplayMode menggunakan metode berikut untuk memeriksa browser seluler yang Anda perlukan untuk mendaftarkan kebiasaan Anda DisplayMode yang mengenali Opera Mobile dengan benar.

Untuk melakukan ini, Anda perlu menambahkan ini ke Global.asax Application_Start:

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

28
2018-03-08 19:29



solusi untuk semua ponsel tanpa perlu menentukan semua nama browser akan seperti ini ...

  protected void Application_Start()
    {
        AreaRegistration.RegisterAllAreas();
        WebApiConfig.Register(GlobalConfiguration.Configuration);
        FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
        RouteConfig.RegisterRoutes(RouteTable.Routes);
        BundleConfig.RegisterBundles(BundleTable.Bundles);
        AuthConfig.RegisterAuth();

        DisplayModeProvider.Instance.Modes.Insert(0,
             new DefaultDisplayMode("Mobile")
             {
                 ContextCondition = (ctx => (
                     (ctx.GetOverriddenUserAgent() != null) && ctx.Request.Browser.IsMobileDevice
             ))
             });  
    }     

0
2017-12-16 11:57