Показать мобильную страницу в WebSharper

У меня есть веб-сайт WebSharper, и я хочу, чтобы на мобильном устройстве у него был другой пользовательский интерфейс. Я хотел бы, чтобы сервер отвечал другим HTML в зависимости от того, находится ли пользователь на мобильном устройстве или нет. Я вижу, как проверить, находится ли пользователь в мобильное устройство в ASP.NET, но я не могу сказать, как перенести это на WebSharper.


person Jacqueline Nolis    schedule 12.01.2016    source источник


Ответы (1)


Объект Context в WebSharper имеет словарь Environment, который содержит исходный контекст. Через него вы можете добраться до Request.Browser.IsMobileDevice. Используя шаблон UI.Next Client-Server, вы можете сделать что-то вроде этого:

module Site

open WebSharper
open WebSharper.Sitelets
open WebSharper.UI.Next
open WebSharper.UI.Next.Server

type EndPoint =
    | [<EndPoint "/">] Home

open WebSharper.UI.Next.Html

type Page = { Desktop: Doc; Mobile: Doc }
let mkPage desktop mobile = { Desktop = desktop; Mobile = mobile }

let HomePage =
    mkPage
    <| h1 [text "Desktop page!"]
    <| h1 [text "Mobile page!"]

let PickPage (ctx : Context<_>) page =
    let context = ctx.Environment.["HttpContext"] :?> System.Web.HttpContextWrapper
    if context.Request.Browser.IsMobileDevice then page.Mobile
    else page.Desktop
    |> Content.Page

[<Website>]
let Main =
    Application.MultiPage (fun ctx endpoint ->
        match endpoint with
        | EndPoint.Home -> PickPage ctx HomePage
    )
person qwe2    schedule 18.01.2016