1

asp.net mvc3/c#/Razor でアプリケーションを作成しましたが、同じアプリケーションに新しいテンプレートを実装したいと思います。同じコントローラー ロジックを使用したいのですが、ビューは異なります。. 例: アラブ首長国連邦から私のサイトにアクセスした場合、テンプレートAを使用したいのですが、他の誰かが私のサイトを別の場所で閲覧した場合は、テンプレートBを表示したいと考えています。asp.net mvc 3で同じコントローラーを使用する方法はありますか?

4

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 に答える