web-dev-qa-db-ja.com

ASP.NET MVCでわかりやすいURLを作成するにはどうすればよいですか?

ASP.NET MVCフレームワーク内でわかりやすいURLを生成するにはどうすればよいですか?たとえば、次のようなURLがあります。

http:// site/catalogue/BrowserByStyleLevel/1

1は参照するスタディレベル(この場合は上位)のIDですが、StackOverflowと同じ方法でURLを再フォーマットしたいと思います。

たとえば、次の2つのURLを使用すると、同じ場所に移動できます。

https://stackoverflow.com/questions/119323/nested-for-loops-in-different-languages

https://stackoverflow.com/questions/119323/

EDIT:URLのフレンドリ部分は、スラッグと呼ばれます。

39
Kieron

この問題を解決するには2つのステップがあります。まず、新しいルートを作成するか、デフォルトルートを変更して追加のパラメーターを受け入れます。

routes.MapRoute(  "Default", // Route name
                   "{controller}/{action}/{id}/{ignoreThisBit}", 
                   new { controller = "Home", 
                         action = "Index", 
                         id = "",
                         ignoreThisBit = ""}  // Parameter defaults )

これで、URIの最後に好きなものを入力でき、アプリケーションはそれを無視します。

リンクをレンダリングするときは、「わかりやすい」テキストを追加する必要があります。

<%= Html.ActionLink("Link text", "ActionName", "ControllerName",
                    new { id = 1234, ignoreThisBit="friendly-text-here" });
51
Craig Stuntz

これが、アプリケーションにスラッグURLを実装した方法です。 注:デフォルトのMaprouteは変更しないでください。また、ルートはルートリストに追加された順序で処理されます。

routes.MapRoute(
    "Default", // Route name
    "{controller}/{action}/{id}", // URL with parameters
    new { controller = "Home",
          action = "Index",
          id = UrlParameter.Optional
    } // Parameter defaults
);
routes.MapRoute("Place", "{controller}/{action}/{id}/{slug}", new { controller = "Place", action = "Details", id = UrlParameter.Optional,slug="" });
3
Hamid Tavakoli

global.asaxにルートがあります

  routes.MapRoute(
                    "Default", // Route name
                    "{controller}/{action}/{id}", // URL with parameters
                    new { controller = "Home", action = "Index", id = ""} 
                    // Parameter defaults )

次のように独自のルートを定義できます。

controllerは、controllersフォルダー内のcsクラスです。

選択した名前でIDを定義できます。

システムは値をactionResultメソッドに渡します。

このステップの詳細については、こちらをご覧ください: http://www.asp.net/learn/mvc/tutorial-05-cs.aspx

1
Moran Helman