2013-01-10 58 views
0

我已经在RouteConfig的路由,重定向到Archive行动时,有一年一个月: -MVC路由到博客类别

routes.MapRoute("Blog", "Blog/{action}/{id}", 
new 
{ 
    controller = "Blog", 
    action = "show", 
    id = "" 
}); 

现在我希望有另一个MapRoute重定向到Archive存在某个类别时的操作,例如Blog/Archive?catId=2

我该如何做到这一点?

+0

呃 - 那条路线是为了'show'行动?另外 - 你不'路由'查询字符串参数;因为它们不是url路径的一部分。查询字符串参数通常映射到目标操作方法上的参数。 –

+0

是不是一样?你只在你的路线中指定了默认值。这意味着如果它没有改变,它将使用'Blog/show'。为了进入'Archive'动作,'Blog/Archive/2'应该可以工作..其中action方法接受'int id' ..而不指定其他路由。 –

+0

其实我犯了一个错误。我正在将类别重定向到与年/月操作相同的操作。我把这个分类改为另一种行动,现在就开始工作。我不需要RouteConfig内的路由I beleive – Johann

回答

1

在你RouteConfig您可以添加

routes.MapRoute("Archive", "Blog/Archive", new {controller = "Blog", Action = "Archive" }); 

在你控制器,你可以有这样的动作

public void Archive(int catId) { 
    ... 
} 

这将自动CATID查询字符串值映射到CATID变量。

+2

注意:此路由映射必须在* global.asax中的其他(非归档)路由映射之前*为此工作。否则'Blog/Archive'看起来会像'Blog/{action}',并首先被抓到。 – Faust

+0

其实我不需要这个路由操作,因为我直接从部分视图重定向。我的错。但在未来可能会有所帮助,谢谢! – Johann