Frage

Wir planen, eine WAP-Seite auf die Implementierung ASP.NET-MVC verwendet wird.

Hat jemand eine experiance davon? Gibt es Gotchas?

Wir werden auch eine „Standard“ Website für Browser implementieren. Wäre es möglich, einen einzigen Satz von Models und Controller zu haben, und haben nur separate Ansichten für jeden Standort?

War es hilfreich?

Lösung

Es ist möglich, in den meisten Fällen einen einzigen Satz von Modellen und Controllern zu haben. Die Art und Weise, es zu tun wird durch die Umsetzung des folgenden Theming / Templating-Engine sein. [Theming Support] [1] Ich Schweinchen gesichert meine Lösung auf einem Theming / Templating-Engine.

Die große Abweichung von der Gegenstandsquelle ist in der Global.asax.cs Datei, in der Sie die folgenden Zeilen Code hinzufügen müssen:

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

Ich weiß, ich hatte ein paar Code-Änderungen zu machen, um es MVC 1 kompatibel, aber ich kann die genaue Änderungen nicht erinnern. Das andere große Problem, das ich hatte, war das Debuggen der Ausgabe. Dazu verwendete ich firefox mit einer Erweiterung ([User Agent Switcher] [2]), dass ich Accept-Typen, um es hinzuzufügen geändert.

Für WAP2 / XHTML1.2 der Accept-Typen sind: text / html, application / vnd.wap.xhtml + xml, application / xhtml + xml, application / xml; q = 0,9, / ; q = 0,8

Natürlich müssen Sie Ihre Masterpage und Content-Seiten zu WML oder XHTML1.2

einzuhalten

[1]: http://frugalcoder.us /post/2008/11/13/ASPNet-MVC-Theming.aspx Theming Unterstützung

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

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top