2011-12-23 15 views
5

私はデフォルトではC#MVCのルートを持っている:C#MVCルーティング - 複数のルート

routes.MapRoute(

    "Default", 

    "{controller}/{action}/{id}" 

    new { controller = "Home", action = "Index", id = "Welcome" } 

); 

今、私のようなURLを取得します:

mysite.com/Home/Index/Page1 
mysite.com/Home/Index/Page2 
mysite.com/Home/Index/Page3 
mysite.com/Account/Login 
mysite.com/Account/Etc 

をしかし、私は短いとの最初のセットを持っていると思います次のようなURL:

mysite.com/Page1 
mysite.com/Page2 
mysite.com/Page3 
mysite.com/Account/Login 
mysite.com/Account/Etc 

私のような本当にシンプルにコードを期待:

routes.MapRoute(

    "Shorturl", 

    "{id}", 

    new { controller = "Home", action = "Index", id = "Welcome" } 

); 

routes.MapRoute(

    "Default", 

    "{controller}/{action}/{id}" 

    new { controller = "Home", action = "Index", id = "Welcome" } 

); 

しかし、それは動作しません。それは最初のルートしか取らず、2番目のルートを忘れてしまいます。 mysite.com/Page1のように1つのパラメータしかない場合、mysite.com/Account/Loginのように複数のルートがある場合に2番目のルートを取ると、プログラムを最初のルートにすることはできますか?

編集:私は行うことができます :

routes.MapRoute("Short", "short/{id}", new { controller = "Home", action = "Indx", id = "Page1" }); 

しかし、その後、私はURLで醜い "/ショート" を持っているでしょう。 私はそれを修正することができます:

routes.MapRoute("Page1", "Page1", new { controller = "Home", action = "Index", id = "Page1" }); 

しかし、その後、私はあなたがこのような何かをしようとする場合があります

+0

http://stackoverflow.com/questions/2975642/routing-in-asp-net-mvc-2-0 – CodeCaster

答えて

3

...手動でそれぞれの新しいページを追加する必要があります。

public static void RegisterRoutes(RouteCollection routes) 
    { 
     routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 

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

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

    } 

は、既定の前にルートにこれを追加(またはも、あなたがしたい場合は、デフォルトを削除)

しかし、これらが追加される順序が重要であることを確認してください。

情報の欠落が1ビットあり、コントローラー内のアクションがありました。

public ActionResult Index(string id) 
{ 
     ViewBag.Message = "Welcome to ASP.NET MVC!"+id; 
     return View(); 
} 

希望します。

よろしくお願いいたします。

+0

これで、2つのルートを区別できないため、この後に追加されるデフォルトルータは忘れてしまいます。これは次のように動作します:routes.MapRoute( "Short"、 "short/{id}"、新しい{controller = "Home"、action = "Info"、id = "Leermethode"});しかし、私はURLに醜い "短い"を持っています。 – Paul

+0

だから少し遊んだので、次のように試してみよう。 – Sitnam

+0

ページのルートとアクションをすべてソートしたら、DBからコンテンツを追加するか、ハードコーディングされたアイテムであれば部分的に使うことができる。希望これはもう少し役立ちます:$ – Sitnam

関連する問題