2013-08-05 55 views
0

我有我的web应用程序的一些链接,看起来像这样:麻烦与Global.asax的路由

localhost:12345/?something=1 
localhost:12345/?something=2 
localhost:12345/?something=3 
localhost:12345/?something=4 

末每个数字是,我需要传递给我的控制器,以显示与此相关的信息的ID 。

我知道我需要在我的global.asax页面中创建一个新的routes.MapRoute,但我并不十分确定如何去做。我尝试这样做:

routes.MapRoute(
    "Id", // Route name 
    "{controller}/{action}/{*Id}", // URL with parameters 
    new { controller = "Home", action = "Id", Id = "" } // Parameter defaults 
); 

---编辑---

我只成功获得每一个人喜欢做显示如下:

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

这并不工作,但是,这只适用于一个id(特别是1)。我不太清楚如何去了解这一点,但我需要我需要:

localhost:12345/?something=1 

以显示ID为1的信息,

localhost:12345/?something=2 

以显示ID 2的信息,

localhost:12345/?something=3 

以显示ID 3.

我也将是数以百计的IDS这么硬编码的东西我的信息n不会是一个方便的选择。到目前为止我没有运气。任何帮助将非常感激!谢谢!

回答

0
 routes.MapRouteWithName(
      "RootName", 
      "{id}", 
      new { controller = "Home", action = "Index", id = 1 }); 

这将产生像这样的链接本地主机/ 1 如果你想这样的链接本地主机/ ID = 1 则:

 routes.MapRouteWithName(
      "RootName", 
      String.Empty, 
      new { controller = "Home", action = "Index"}); 


public ActionResult Index(int id) 
    { 
     //do something with id, make query to database whatever 

     // u usually have model class so you would fill model with your data 
     var model = new YourModel(); 
     //... 
     return View("Index", model); 
    } 
+0

感谢您的回复。这似乎是半工作。你的代码唯一的问题是,你只有它的第一个ID工作。您是否知道我能够通过任何ID的方式?将会有数百个ID,并且每次都要编写它会是一件痛苦的事情。 – scapegoat17

+0

嗯,你想要一个Id是一个动作,嗯嗯,你为什么不使用一个动作,并传递id作为该动作的参数。 –

+0

这就是这条路线正在做的事情。 –

0

如果你有以下的,比如说,HomeController的行动:

public ActionResult SomeAction(int Id) 
    { 
     return View() 
    } 

您可以使用任何下列途径:

//* For Id = 3 this will return path "Home/SomeAction/3" 
routes.MapRoute(
       name: "First", 
       url: "{controller}/{action}/{Id}", 
       defaults: new { controller = "Home", action = "SomeAction", Id= UrlParameter.Optional} 
      ); 


//* For Id = 3 this will return path "SomeAction/3" 
routes.MapRoute(
       name: "First", 
       url: "{action}/{Id}", 
       defaults: new { controller = "Home", action = "SomeAction", Id= UrlParameter.Optional} 
      ); 

//* For Id = 3 this will return path "Home/SomeAction(3)" 
routes.MapRoute(
       name: "First", 
       url: "{controller}/{action}({Id})", 
       defaults: new { controller = "Home", action = "SomeAction", Id= UrlParameter.Optional} 
      ); 


//* For Id = 3 this will return path "LadyGaga/SomeAction/3" 
routes.MapRoute(
       name: "First", 
       url: "LadyGaga/{action}/{Id}", 
       defaults: new { controller = "Home", action = "SomeAction", Id= UrlParameter.Optional} 
      );