Реализация WAP-сайта с использованием ASP.NET-MVC

StackOverflow https://stackoverflow.com/questions/1524280

  •  19-09-2019
  •  | 
  •  

Вопрос

Мы планируем реализовать WAP-сайт с использованием ASP.NET-MVC.

Есть ли у кого-нибудь такой опыт?Есть ли какие-нибудь ошибки?

Мы также будем реализовывать «стандартный» веб-сайт для браузеров.Можно ли иметь один набор моделей и контроллеров и просто иметь отдельные представления для каждого сайта?

Это было полезно?

Решение

По большей части можно иметь один набор моделей и контроллеров.Это можно сделать путем реализации следующего механизма создания тем/шаблонов.Тематическая поддержка] [1] Я поддержал свое решение на вершине тематического/шаблонного двигателя.

Основное отклонение от исходного кода статьи находится в файле Global.asax.cs, куда необходимо добавить следующие строки кода:

protected void Application_BeginRequest(Object Sender, EventArgs e)
{
  SetTheme();
}
//this will set the responses Content Type to xhtml and is necessary as C# sends the WML response header
protected void Application_PreSendRequestHeaders(Object Sender, EventArgs e)
{
  if (this.Context.Items["themeName"].ToString() == "xhtml")
  {
    this.Context.Response.ContentType = "application/vnd.wap.xhtml+xml";
  }
}

private void SetTheme()
{
  //set the content type for the ViewEngine to utilize. 

            HttpContext context = this.Context;
            MobileCapabilities currentCapabilities = (MobileCapabilities)context.Request.Browser;
            String prefMime = currentCapabilities.PreferredRenderingMime;

            string accept = context.Request.ServerVariables["HTTP_ACCEPT"];
            context.Items.Remove("theme");
            context.Items.Remove("themeName");

            if (accept.Contains("application/vnd.wap.xhtml+xml"))
            {
                context.Items.Add("themeName", "xhtml");
            }
            else if (prefMime == "text/vnd.wap.wml")
            {
                context.Items.Add("themeName", "WAP");
            }
            if (!context.Items.Contains("themeName"))
            {
                context.Items.Add("themeName", "Default");
            }
        }

Я знаю, что мне пришлось внести пару изменений в код, чтобы сделать его совместимым с MVC 1, но я не могу вспомнить точные изменения.Другая серьезная проблема, с которой я столкнулся, заключалась в отладке вывода.Для этого я использовал Firefox с расширением ([User Agent Switcher][2]), которое я изменил, добавив в него типы принятия.

Для WAP2/XHTML1.2 типы приема:текст/html,application/vnd.wap.xhtml+xml,application/xhtml+xml,application/xml;q=0.9,/;q=0,8

Очевидно, вам нужно, чтобы ваша главная страница и страницы контента соответствовали WML или XHTML1.2.

[1]: http://frugalcoder.us/post/2008/11/13/ASPNet-MVC-Theming.aspx Поддержка тем

[2]: http://chrispederick.com/work/user-agent-switcher/ Переключатель пользовательского агента

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top