私はASP.NET MVC3 + WebFormsを使用してレポートをレンダリングするための簡単なレポートWebアプリケーションを構築しています。レポート自体はReportViewer ASP.NET WebFormsコントロールによってレンダリングされますが、ASP.NET MVCを使用してパラメータエントリを作成します。ASP.NET MVC + WebForms - ルートコンフリクト
~/Report
のリクエストを除いて、すべてのリクエストがデフォルトのルーティングスキーム「〜/ {controller}/{action}/{parameters}」に従うようにしたいと思います。これを行う正しい方法は何ですか?デフォルトの1とWebフォームページのための1 - ビットを拡大
..
私はGlobal.asax.cs
に2つのルートを持っています。
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
);
routes.MapPageRoute("report-rendering", "Report", "~/Render.aspx");
}
URLは(ReportController
にIndex
メソッドを呼び出そうとし~/Report?id=7
すなわち、微細化、これに伴う問題は、リクエストが来たときに、最初のルートは、第2の1のURLを食べることになってしまいます存在しない)。そのように「報告・レンダリング」ルートは、「デフォルト」のルートの前に来るように、私はそれを変更した場合
:
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapPageRoute("report-rendering", "Report", "~/Render.aspx");
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
);
}
今すぐHtml.ActionLink(の呼び出し)間違ったURLをレンダリングするには、すなわち
`@Html.ActionLink("Report list", "Index", "ReportList")`
は加えながら
`http://localhost:49910/Report?action=Index&controller=ReportList`
私の現在の回避策は、最初の 'デフォルト' のルートを置くレンダリング次のように 'Report'コントローラのリクエストを無視するための正規表現の制約:
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = UrlParameter.Optional }, // Parameter defaults
new { controller = @"(?!report$).*" }
);
これはきれいではありません。繰り返しますが、これを行う正しい方法は何ですか?
また、パラメータをレンダリングフォームに渡す方法はまだ決めていません。クエリパラメータを使用するか、POSTすることができます。私は、クエリのパラメータがより柔軟であると推測しています。ここでベストプラクティスは何ですか?
EDIT:
@LeftyXで答えを研究している間、私は答えを見つけたように、思えます。 URLを生成するときに、すべてのルートと ため使っ名は常にルート名を使用して...
:Professional ASP.NET MVC 3(名前付きルート、第9章、233ページ)での彼のルーティングの章からP.ハークを引用します。たいていの場合、URLを生成するために使用したい ルートを並べ替えることをルーティングに任せることは、実際には偶然に任せています。これは、強盗のコントロールフリークの開発者とよく似ています。 URLを生成するときは、一般的には にリンクするルートを知っているので、名前で指定することもできます。
上記のセクションでは、私が説明したものと非常に似た状況について説明します。
しかし、Html.ActionLink()
にはルート名パラメータで過負荷がないので、このようなルートがあればアプリケーション全体のどこでも確実に使用できませんか?
ご回答ありがとうございます。あなたがそこで何をしたかわかる。 {id}パラメータを追加したため、{id}の値を指定せずに.RouteLink()呼び出しがルートに一致しなくなりました。 しかし、idパラメータを指定してルートを生成すると、このルートと一致します。 これは:http:// localhost:49910/Report/1?actionこの@Html.ActionLink( "ページ1"、 "ページ"、 "ホーム"、新しい{id = 1}、null) = Page&controller = Home これはあなたが期待するものではありませんか? –
@ghostskunks:私は知っています。 WebForms用のリンクを生成するためにRouteLinkを使用する必要があるか、ActionLinkを拡張しようとする可能性があります。 – LeftyX
@ghostskunks:私は何かをまとめようとしましたが(答えを更新しました)、私が言ったように、私は専門家ではありません。それは単なるアイデアです。 – LeftyX