ASP.NET-MVC を使用した WAP サイトの実装を計画しています。
誰もこれを経験していますか?ガチャはありますか?
また、ブラウザ用の「標準」Web サイトも実装する予定です。モデルとコントローラーのセットを 1 つだけにして、サイトごとに個別のビューを用意することは可能でしょうか?
ASP.NET-MVC を使用した WAP サイトの実装を計画しています。
誰もこれを経験していますか?ガチャはありますか?
また、ブラウザ用の「標準」Web サイトも実装する予定です。モデルとコントローラーのセットを 1 つだけにして、サイトごとに個別のビューを用意することは可能でしょうか?
ほとんどの場合、単一のモデルとコントローラーのセットを持つことができます。それを行う方法は、次のテーマ/テンプレート エンジンを実装することです。[Theming Support][1] 私は自分のソリューションを Theming/Templating エンジンの上にピギーバックしました。
記事のソースからの主な逸脱は、次のコード行を追加する必要がある 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 と互換性を持たせるためにコードをいくつか変更しなければならなかったことは知っていますが、正確な変更を思い出せません。私が抱えていた他の大きな問題は、出力のデバッグでした。このために、拡張機能 ([User Agent Switcher][2]) を付けた Firefox を使用しました。これを変更して、Accept Types を追加しました。
WAP2/XHTML1.2 の場合、受け入れるタイプは次のとおりです: text/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/ユーザーエージェントスイッチャー