5

次のようなルートを持つasp.net mvcアプリケーションがあります。

routes.MapRoute("Blog", 
    "{controller}/{action}/{year}/{month}/{day}/{friendlyName}",                          
    new { controller = "Blog", action = "Index", id = "", friendlyName="" }, 
    new { controller = @"[^\.]*", 
          year = @"\d{4}", 
          month = @"\d{2}", 
          day = @"\d{2}" }
);

私のコントローラー アクション メソッドの署名は次のようになります。

public ActionResult Detail(int year, int month, int day, string friendlyName)
{ // Implementation... }

私の見解では、私は次のようなことをしています:

<%= Html.ActionLink<BlogController>(item => item.Detail(blog.PostedOn.Year, blog.PostedOn.Month, blog.PostedOn.Day, blog.Slug), blog.Title) %>

ActionLink で生成された URL は機能しますが、URL の書き換えではなく、クエリ文字列変数を使用します。

たとえば、/blog/detail/2008/07/05/my-slug の代わりに /blog/detail/my-slug?year=2008&month=7&day=5 を生成します。

URLが期待どおりになるように、ActionLinkの汎用バージョンで整数値を適切に埋め込む方法はありますか?

ありがとう

ジム

4

2 に答える 2

4

パラメータが整数であるという事実は、問題とは何の関係もありません。使用したいルート定義は実際には使用されていません。そのため、生成された URL は、必要な構造を構築する代わりにクエリ文字列パラメーターを使用しています。

ルートはトップダウンで評価されるため、要求された URL 生成を満たすより一般的なルート定義がある可能性があります。この投稿で表示したルートをルート定義の一番上に移動してみてください。生成されたリンクが期待どおりであることを確認できます。次に、ルート定義をより具体的にするか、必要に応じて移動するように変更することを検討してください。

これらのタイプのシナリオをデバッグすることは、大きな苦痛になる可能性があります。Phil Haack のroute debuggerをダウンロードすることをお勧めします。

于 2008-09-28T18:22:45.727 に答える
2

代わりに、年、月、日を文字列としてフォーマットすることをお勧めします。これについて考えてみてください: これらの「整数」について何らかの計算を行いますか? おそらくそうではないので、それらを整数にする意味はありません。それらを文字列として取得したら、先行ゼロ形式を強制できます。

于 2008-09-28T18:15:23.263 に答える