MVCルートアプリケーション(マスターページとテーマを含むポータル)を作成し、WebFormsベースのサブプロジェクトをいくつか追加することは可能ですか(ポータルに統合したい既存のWebFormsアプリケーションが既にあります)。
ナビゲーション(サイトマップ、URLルーティング)をどのように集中化しますか?
マスターページをどのように共有しますか?
リソースをどのように参照しますか(〜問題など)。
WebフォームとMVCの組み合わせは完全に可能です。 Scott Hanselmanによるこのブログ投稿 を参照してください。
参考までに、昨日このタスクを達成することができました。つまり、既存のWebForms WebサイトにMVC機能を追加します。
「最良の方法は、WebフォームアプリケーションをMVCとして書き直すことです」と言われますが、アプリケーションが十分に確立されており、時間が経つにつれて非常に怪物になった場合、ビジネスケースはほとんどありません)。私の場合、このアプリケーションに新しい機能を実装するように頼まれました-そして、最近他のプロジェクトでMVCで開発していた-私はこの新しい機能をMVCで構築したかったのです。これは私がやったことです:
新しいASP.NET MVC 4アプリケーションを作成し、空のテンプレート(Razorを使用)を選択しました
ロードしたら、右クリックしてReferences> Browseを選択し、既存のWebサイトのBinフォルダーに移動します。次に、既存のサイトで使用していたDLLに追加しました。参考のために、私はAjaxControlToolkitを使用しているため、NuGetから最新のものを追加することにしました。これにより、web.configファイルが自動更新されます
次に、Windows Explorerを開いて、既存のWebサイトのルートフォルダーに移動しました。 Visual Studioを使用して、既存のサイトのトップレベルフォルダー構造を複製し(Binフォルダーを除く)、同じトップレベルフォルダーを持つ2つのサイト(ただし、MVCを持つ新しいプロジェクト) App_Start、Controllers、Models、Viewsフォルダもありますが、明らかにBinではありません)。
セットアップしたら、Windows Explorerの対応する最上位フォルダーからサブフォルダーとファイルをコピーし、ソリューションに貼り付けました。このようにすると、プロジェクトはサブフォルダーとコンテンツを直接コピーし、Visual Studioを介して既存のアイテムをファイルにコピーするだけでコピーできるため、時間を節約できます。注:ルートフォルダーについては、[〜#〜] not [〜#〜] copy in web.configまたはGlobal.asax =、ただし他のすべてのファイル(default.aspxなど)にコピー
すべてのコンテンツがコピーされたら、新しいプロジェクトでweb.configを開き、既存のサイトでweb.configを開きました。既存のWebサイトに固有のもの(appSettings、connectionStrings、名前空間、メンバーシップ情報など)を新しいweb.configにコピーしました。 Global.asaxファイルにも同じことが当てはまります。
ビルドを試みて、見落としていたものはすべて修正しました。
すべてが正しくなったら(そして、死の黄色い画面をいくつか撃ち落としていた)、default.aspxをロードするときにページが見つからないというエラーが表示されることに気付きました。これはルーティングにかかっています。ルーティング情報に加えた変更は次のとおりです(Global.ascx MVC 3またはApp_Start> RouteConfig.cs MVC 4にあります)。
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
// This informs MVC Routing Engine to send any requests for .aspx page to the WebForms engine
routes.IgnoreRoute("{resource}.aspx/{*pathInfo}");
routes.IgnoreRoute("{resource}.aspx");
// Important change here: removed 'controller = "Home"' from defaults. This is the key for loading
// root default page. With default setting removed '/' is NOT matched, so default.aspx will load instead
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { action = "Index", id = UrlParameter.Optional }
);
}
これらのすべての手順を実行すると、サイトは以前と同じように読み込まれて実行されましたが、現在はASP.NET WebFormsとMVCハイブリッドがあります。このタスクを達成する簡単な方法はおそらくあると思いますが、他の方法を試しましたが失敗しました。この方法で約20分かかり、稼働していました...よく座ってコーディングしました:)
上記の素晴らしい答え。他に考えられることは、ASP.NETからASP.NET MVCへの移行です。その場合、 この投稿が役立つかもしれません プロジェクトファイルを移行します。
私はこの状況であまりにも立ち往生していました、私はすべて解決したソリューションを得た後、まずあなたのビューフォルダに_web.config
_をコピーしました。
Route.config(Routeconfig)
ファイルを開くと、1つのメソッドRegisterRoutes
が見つかり、そのまま保持し、RegisterRoutes2()
という名前の別のメソッドを作成し、以下のメソッドコードをコピーして貼り付けます。 mvcアプリケーションから:
_public static void RegisterRoutes2(RouteCollection routes)
{...}
_
場合によっては、mvcアプリのメソッド名はRegisterRoutesになります。上記のコードが機能しない場合は、マシンのmvcアプリケーションからコピーして貼り付けてください。次に、_global.asax
_ファイルに移動すると、RegisterRoutes()
が呼び出されます。簡単になりましたが、RegisterRoutes2()
も呼び出されます。そして、完了、アプリケーションの再起動、またはビルドのクリーンアップが実行されます。