2011-08-23 88 views
1

因为这个原因,我对MVC正面有点困惑,我有以下默认路由定义;路由和Url助手混淆

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

当我使用URL帮手,即

@Url.Action("MyAction") 

它生成此URL;

/?action=MyAction&controller=MyController 

并且从未找到我的操作方法。佣工如何生成Url,我该如何纠正?

回答

1

只要使用过载指定动作和控制器:

@Url.Action("MyAction", "MyController")

如果您使用过载,其只需要操作名称,控制器从当前路由数据拍摄。默认路由不会进入它。

@Url.Action("MyAction")

相当于

@Url.Action("MyAction", (string)ViewContext.RouteData.Values["controller"])

+0

指定控制器仍然导致相同的网址,'/?action =&controller =' – MaRk

+0

P.S只检查了MSDN库Url.Action()和它的评论;该方法返回的URL具有如下的格式; \首页\关于 – MaRk

+0

@JEZ有一些奇怪的事情发生在那里,它应该以文档格式生成地址,而不是像你在代码中那样查询字符串。我从来没有来过这个问题,不幸的是没有想法,尽管我怀疑你的问题在别处。你能用一个非常简单的例子重新创建这个问题并发布完整的代码吗? – fearofawhackplanet

0

我有同样的问题,我有始建使用WebForms和慢慢迁移部分MVC web应用程序,以支持我有一个路线条目,最终打破路由评估代码,并导致有趣的行动网址

this blog post固定我的问题