2009-07-24 13 views
2

Je développe un site Web qui doit être regardé sur les appareils mobiles (téléphone portable). J'utilise HTML 4.01, rien de spécial. Les pages s'affichent correctement sur tous les navigateurs mobiles que nous avons testés, à l'exception des éditions 1 à 5 de Nokia Series 40. En regardant de plus près, il semble que IIS rend automatiquement le html avec le type de contenu text/vnd.wap.wml au lieu de text/html. Comme nous n'utilisons pas le WAP, la page échoue avec une erreur. J'utilise ASP.Net MVC 1.0 alors j'ai ajouté un ActionFilterAttribute pour remplacer le type de contenu. Ce code s'exécute mais sort toujours comme vnd.wap.wml du côté client.
J'utilise ce doctype;asp.net mvc maintient le texte/html contenu-type de substitution avec .wml

<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

Il convient de noter que le vnd.wap.wml est le premier Accept-Encoding spécifié par le navigateur mobile, donc je suppose IIS7 est le servir pour cette raison. Et je suppose que MVC ne fait pas spécifiquement référence aux fichiers .html (ou .aspx), peut-être que le type mime est ignoré? Je suppose que c'est probablement un correctif IIS plutôt qu'un correctif de code.

Toute aide est très appréciée!

Répondre

5

Il s'avère que je n'avais pas implémenté le filtre ActionFilter correctement. J'avais besoin de surcharger la méthode OnResultExecuted en plus de la méthode OnActionExecuted. L'attribut complet ressemble à ceci (il suffit d'ajouter [HtmlOverrideFilter] à vos contrôleurs si nécessaire). J'espère que cela aide quelqu'un.

internal class HtmlOverrideFilter : ActionFilterAttribute 
{ 
    public override void OnActionExecuted(ActionExecutedContext filterContext) 
    { 
     filterContext.HttpContext.Response.ContentType = "text/html"; 
    } 

    public override void OnResultExecuted(ResultExecutedContext filterContext) 
    { 
     filterContext.HttpContext.Response.ContentType = "text/html"; 
    } 
}