asp.net mvc3/c#/Razor でアプリケーションを作成しましたが、同じアプリケーションに新しいテンプレートを実装したいと思います。同じコントローラー ロジックを使用したいのですが、ビューは異なります。. 例: アラブ首長国連邦から私のサイトにアクセスした場合、テンプレートAを使用したいのですが、他の誰かが私のサイトを別の場所で閲覧した場合は、テンプレートBを表示したいと考えています。asp.net mvc 3で同じコントローラーを使用する方法はありますか?
3 に答える
1
カスタム ビュー エンジンを作成し、メソッドをオーバーライドしてパスを調整できます。
public class LocationAwareViewEngine: RazorViewEngine
{
protected override IView CreateView(ControllerContext controllerContext, string viewPath, string masterPath)
{
// adjust the viewPath and masterPath
return base.CreateView(controllerContext, viewPath, masterPath);
}
protected override IView CreatePartialView(ControllerContext controllerContext, string partialPath)
{
// adjust the partialPath
return base.CreatePartialView(controllerContext, partialPath);
}
protected override bool FileExists(ControllerContext controllerContext, string virtualPath)
{
// adjust the virtualPath
return base.FileExists(controllerContext, virtualPath);
}
}
Global.asax.cs
ViewEngines.Engines.Add(new LocationAwareViewEngine());
于 2012-07-19T10:07:23.373 に答える
1
NuGet パッケージがあります。そして、ASP.NET MVC 4 には組み込まれています。このパッケージは、ビューのモバイル バージョンを提供するためにユーザー エージェントをテストします。このためのカスタム ビュー エンジンを実装します。ユーザー エージェントを使用する代わりに、Request.UserHostAddress (IP) を使用して適切なフォルダーにディスパッチするように拡張できます。ユーザー IP と国の間のマッピングに関する限り、これは自分で実装するか、既存のパブリック API を使用する必要があります。
于 2012-07-19T09:34:40.340 に答える
0
非常に単純だと思います。_viewstart ページとレイアウト ページを使用します。_viewstart ページで、リクエストが UAE からのものかどうかをチェックする条件付きロジックを記述し、使用するレイアウト ページを切り替えます。
If "this is uae request" then
Layout = "layout1.vbhtml"
else
Layout = "layout2.vbhtml"
End if
于 2012-07-19T09:36:35.377 に答える