大規模なASP.NETWebフォームサイトである「レガシーシステム」を使用しています。このシステムの主な拡張ポイントは、動的にロードおよびレンダリングされる.ascxコントロールを作成することです。
WebサイトプロジェクトにはASP.NETMVC3の依存関係が参照されており、ASP.NET 4ルーティングシステムに次のルートを導入することで、MVCを使用するための根拠もあります。
routes.MapRoute(
"Default", // Route name
"{controller}.mvc/{action}/{pid}", // URL with parameters
new { controller = "Home", action = "Index", pid = "" } // Parameter defaults
このルートによれば、のurlパターンによって呼び出されるすべてのものが{controller}.mvc
MVCパラダイムに従ってレンダリングされます。
私のascxコントロール(ASCXの使用を避けることはできません、私はそれと一緒に暮らす必要があります)で、コードからコントローラーを呼び出しています:
<%
var controller = new NamingsController(DependencyResolver.Current.GetService<InDocContext>());
var htmlToRender = controller.RenderExistingNamings();
%>
<%=htmlToRender%>
コントローラを呼び出すこの方法は間違っています-私は手動で作成していますが、「通常の方法」ではコントローラファクトリによって作成されています。私の場合、リクエストコンテキスト、つまりコントローラーコンテキストは設定されておらず、コントローラーは標準のロジッククラスよりも優れています。
私の場合、コントローラーのアクションを呼び出して、ユーザーがブラウザーを介してコントローラーを呼び出したかのように実行する正しい方法は何ですか?