2009-10-06 9 views
2

Nous prévoyons d'implémenter un site WAP en utilisant ASP.NET-MVC.Implémentation d'un site WAP en utilisant ASP.NET-MVC

Quelqu'un at-il une expérience de cela? Y a-t-il des Gotcha?

Nous allons également implémenter un site web "standard" pour les navigateurs. Serait-il possible d'avoir un seul ensemble de modèles et de contrôleurs, et juste avoir des vues séparées pour chaque site?

+0

votre site sera en utilisant WAP1/WML ou WAP 2/XHT ML1.2? –

Répondre

3

Il est possible d'avoir pour la plupart un seul ensemble de modèles et de contrôleurs. La façon de le faire sera de mettre en œuvre le moteur Theming/Templating suivant. [Theming Support] [1] J'ai piggy ma solution sur le dessus d'un moteur Theming/Templating.

L'écart majeur de la source de l'article est dans le fichier Global.asax.cs où vous devez ajouter les lignes de code suivantes:

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

Je sais que je devais faire quelques changements de code à rendre MVC 1 compatible, mais je ne me souviens pas des changements exacts. L'autre problème majeur que j'avais était le débogage de la sortie. Pour cela, j'ai utilisé firefox avec une extension ([User Agent Switcher] [2]) que j'ai modifié pour y ajouter des types d'acceptation.

Pour WAP2/XHTML1.2 les types sont Accept: text/html, application/xml vnd.wap.xhtml +, application/xhtml + xml, application/xml; q = 0,9, /; q = 0,8

Il est évident que vous avez besoin de vos masterpage et les pages de contenu à adhérer à WML ou XHTML1.2

[1]: http://frugalcoder.us/post/2008/11/13/ASPNet-MVC-Theming.aspx thématisation soutien

[2]: http://chrispederick.com/work/user-agent-switcher/ User Agent Switcher

+0

Merci qui a aidé beaucoup –

+0

Mon plaisir :). –

Questions connexes