ユーザーの歩数計エントリを記録するASP.NETMVC3アプリケーションがあります。ユーザーは、にアクセスして最新の歩数計エントリをすべて表示でき、、、、などのURLにアクセスして、年、/Pedometer
年/月、または年/月/日付でフィルタリングできます。/Pedometer/2011
/Pedometer/2011/08
/Pedometer/2011/08/15
で2つのマップされたルートを作成しましたGlobal.asax
。以下に示す最初のルートは、日付でフィルタリングするためのさまざまなURLパターンを許可するものです。2番目のルート(図には示されていません)は、デフォルトのASP.NETMVCルートです。
routes.MapRoute(
"PedometerEntries", // Route name
"Pedometer/{year}/{month}/{day}", // URL with parameters
new
{
controller = "Pedometer",
action = "Index",
year = UrlParameter.Optional,
month = UrlParameter.Optional,
day = UrlParameter.Optional
}, // Parameter defaults
new
{
year = @"\d{4}",
month = @"([012]?\d{1})?",
day = @"(([1-9])|([12][0-9])|(3[0-1]))?"
} // Parameter constraints
);
これが私の質問です。次のフォームのリンクを作成するビューがあります。currentUrl?format=csv
これにより、ユーザーは要求されたURLの歩数計エントリをCSV形式でダウンロードできます。したがって、ユーザーがにアクセスしている/Pedometer
場合、ダウンロードリンクはになります/Pedometer?format=csv
。ユーザーが/Pedometer/2011/08
ダウンロードリンクにアクセスしている場合は、になります/Pedometer/2011/08?format=csv
。
このようなリンクを作成するためDownloadToExcel
に、次のコードで名前が付けられたカスタムHtmlヘルパーを追加しました。
public static MvcHtmlString DownloadToExcel(this HtmlHelper helper, string linkText)
{
RouteValueDictionary routeValues = helper.ViewContext.RouteData.Values;
// Add the format parameter to the route data collection, if needed
if (!routeValues.ContainsKey("format"))
routeValues.Add("format", "csv");
return helper.ActionLink(linkText, // Link text
routeValues["action"].ToString(), // Action
routeValues); // Route values
}
ビューにマークアップを追加すると@Html.DownloadToExcel()
、リンクが生成されますが、これが摩擦です-ユーザーが最近のエントリまたは年/月または年/月/日付でフィルタリングされたエントリにアクセスすると、期待どおりに機能しますが、ユーザーが年フィルターURLにアクセスします。
次のリストは、ユーザーがアクセスするURLと、カスタムHtmlヘルパーによって生成された対応するURLを示しています。
- 訪問:
/Pedometer
-ダウンロードリンク:/Pedometer?format=csv
- 訪問:
/Pedometer/2011
-ダウンロードリンク:/Pedometer?year=2011&format=csv
- 訪問:
/Pedometer/2011/08
-ダウンロードリンク:/Pedometer/2011/08?format=csv
- 訪問:
/Pedometer/2011/08/15
-ダウンロードリンク:/Pedometer/2011/08/15?format=csv
/Pedometer/2011
ダウンロードリンクにアクセスするのはなぜ/Pedometer?year=2011&format=csv
ですか/Pedometer/2011?format=csv
?そして、なぜそれはその1つのケースでは機能しないが、年/月および年/月/日付のケースでは期待どおりに機能するのでしょうか。
ありがとう