2011-08-26 28 views
0

我在Global.asax.cs中配置的路由是这样的:问题的给予id来动作

routes.MapRoute("Post", "Post/Show/{PostId}", new { controller = "Post", action = "Show" }); 

,这是所使用的控制器的动作与预览:

public partial class PostController : Controller 
{ 
    public ActionResult Show(int PostId) 
    { 
     ... 
    } 
} 

的问题是,它选择显示()动作以使用,但它没有给出int值,为此它给null.Here是我用URL的一个示例:../邮政/显示/ 0

编辑: 如果我在配置路线是这样的:

 routes.MapRoute("Post", "Post/Show/{id}", new { controller = "Post", action = "Show" }); 
     routes.MapRoute("Timeline", "{controller}/{action}/{Page}", new { controller = "Timeline", action = "List" }); 

一切正常,但是当我将其配置是这样的:

 routes.MapRoute("Timeline", "{controller}/{action}/{Page}", new { controller = "Timeline", action = "List" }); 
     routes.MapRoute("Post", "Post/Show/{id}", new { controller = "Post", action = "Show" }); 

第二航线“邮报”的失败。 为什么?!

+0

顺序应该永远是特殊到一般。 'Post/Show/1232123'将始终与'{controller}/{action}/{page}'匹配完全相同的模式。你可以始终把路线本身路由约束从匹配剔除不必要的路线,但没有理由(根据您以上途径),你甚至需要交换他们。 – Buildstarted

+0

根据您的时间线路线。该路线基本上将作为您的默认路线。那是你要的吗?任何对“http:// site.com /'的请求都将与您的时间轴路线相匹配。 – Buildstarted

+0

不,我不希望这样,我已经设置defoult路线: routes.MapRoute( “家”, “”,新{控制器= “家”,行动= “索引”}); – kr85

回答

2

你应该尝试:

routes.MapRoute("Post", "Post/Show/{PostId}", new { controller = "Post", action = "Show", PostId = UrlParameter.Optional }); 
+0

尝试过,但不起作用。 THX的帮助反正 – kr85

+0

巴比说,顺序很重要,我suggusted路线必须是默认路由之前。你也可以使用默认的路由,而不是一个自定义的,可以替代由ID的所有帖子ID,它应该直接映射到默认的这条路上面MVC路线 –

+0

我有工作,因为它应该(就像在问题的路线应该另一条路线,用id)。这是路线:routes.MapRoute( “时间轴”, “{控制器}/{行动}/{页}”,新的{控制器= “时间轴”,动作= “列表”}); – kr85

1

这应该只是记住路线出现在Global.asax的顺序也很重要。

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