ASP.NET MVCプロジェクトをASP.NET WebFormsプロジェクトに接続する

なぜこれが必要なのでしょうか? 大規模なASP.NET WebFormsアプリケーションがあり、ASP.NET MVCで記述されたプロジェクトがあり、それらを結合したいとします。



私たちのサイトのアドレスがwww.my-awesome-site.comであり、 www.my-awesome-site.com / mvc-stuffでMVCを利用できるようにしたいとしましょう。



前提条件:ASP.NET Webアプリケーション(WebFormsApplication)とASP.NET MVCプロジェクト(MvcApplication)の2つのプロジェクトを備えたソリューションがあります。



なすべきこと。

1. WebFormsApplication用のASP.NET MVCをインストールします

2. MvcApplicationのWebFormsApplicationへのリンクを追加します

3. Application_Startと同様のパブリックメソッドをMvcApplicationに追加します

4. WebFormsApplicationアプリケーションのApplication_Startでこのメソッドを呼び出します

5. Razor Generatorを使用して、MvcApplicationアセンブリにビューを含めます

4. ...

5.利益!!!







1. WebFormsApplication用のASP.NET MVCをインストールします。次のコマンドを使用して、nugetで実行します。Get-ProjectWebFormsApplication | インストールパッケージAspNetMvc



2. WebFormsApplicationのリンクをMvcApplicationに追加します。 それは簡単です-参照を追加...その後、あなたは知っています



3. Application_Startと同様のパブリックメソッドをMvcApplicationに追加します

Global.asax MvcApplicationコード

public class MvcApplication : System.Web.HttpApplication { protected void Application_Start() { Start(); } public static void Start(string prefix = null) { AreaRegistration.RegisterAllAreas(); WebApiConfig.Register(GlobalConfiguration.Configuration); FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters); // let's register routs with prefix RouteConfig.RegisterRoutes(RouteTable.Routes, prefix); BundleConfig.RegisterBundles(BundleTable.Bundles); AuthConfig.RegisterAuth(); } }
      
      







ここには「プレフィックス」などのパラメーターがあり、ルーティングに必要です。 したがって、RouteConfigクラスのRegisterRoutesメソッドを変更して、このパラメーターを受け入れられるようにします。



RouteConfig MvcApplicationコード

 public class RouteConfig { public static void RegisterRoutes(RouteCollection routes, string prefix) { if (!string.IsNullOrEmpty(prefix) && !prefix.EndsWith("/")) { prefix += "/"; } routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); routes.MapRoute( name: "Default", url: prefix + "{controller}/{action}/{id}", defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } ); } }
      
      







4. WebFormsApplicationアプリケーションのApplication_Startでこのメソッドへの呼び出しを追加します

Application_Start Global.asax WebFormsApplicationコード

 void Application_Start(object sender, EventArgs e) { // Code that runs on application startup BundleConfig.RegisterBundles(BundleTable.Bundles); AuthConfig.RegisterOpenAuth(); // Here we add MVC app MvcApplication.MvcApplication.Start("mvc-stuff"); }
      
      







5. Visual Studioのプラグインをインストールします

これを行うには、拡張機能と更新プログラムを使用してRazor Generatorをインストールします(MVC用のRazor Single File Generatorと混同しないでください)。



6. Razor Generatorを使用して、MvcApplicationアセンブリでビューを有効にします

MvcApplicationプロジェクトのRazor Generatorをインストールします。これは、次のGet-Project MvcApplicationを使用して、nugetで実行します。 インストールパッケージRazorGenerator.Mvc

目的のビューに対して、ビルドアクション:なし、カスタムツール:RazorGeneratorのプロパティを設定します。 その後、viewName.generated.csというファイルがView用に生成されます



以上です。 これで、プロジェクトをビルドして、何が起こったのかを確認できます。



ここにいくつかの関連リンクがあります

かみそり発生器

RazorGeneratorを使用してMVC Razorビューをプリコンパイルします

ASP.NET MVC-WebFormsでの使用方法

ASP.NET MVC-アプリケーションの一部を別のアセンブリに組み込む方法

HarmonyのASP.NET WebFormsおよびASP.NET MVC

MVCをWebフォームプロジェクトに追加する



All Articles