Asp.Net MVC:Html.ActionLinkを取得して整数値を適切にレンダリングするにはどうすればよいですか?
-
02-07-2019 - |
質問
次のようなルートの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&amp; month = 7&amp; day = 5を生成します
URLが期待どおりに出力されるように、整数値を適切にパディングするActionLinkの汎用バージョンを取得する方法はありますか?
ありがとう
ジム
解決
年、月、日を文字列としてフォーマットすることをお勧めします。 これについて考えてみてください。これらの「整数」について数学をやっていますか?おそらくそうではないので、それらを整数にする意味は本当にありません。 それらを文字列として取得したら、先頭のゼロ形式を強制できます。
他のヒント
パラメータが整数であるという事実は、問題とは関係ありません。使用するルート定義は実際には使用されていません。そのため、生成されたURLは、必要な構造を構築する代わりにクエリ文字列パラメーターを使用しています。
ルートはトップダウンで評価されるため、リクエストされたURL生成を満たすより一般的なルート定義を持っている可能性があります。この投稿で表示したルートをルート定義の最上部に移動してみてください。生成されたリンクが期待どおりであることがわかります。次に、ルート定義を変更して、より具体的にするか、必要に応じて移動するようにします。
これらのタイプのシナリオのデバッグは、大きな苦痛になります。 Phil Haackのルートデバッガをダウンロードすることをお勧めします。人生がずっと楽になります。