将参数传递给Index视图

时间:2011-09-23 17:00:00

标签: c# asp.net asp.net-mvc asp.net-mvc-3

这里非常基本的问题。为什么当我尝试查看

时出现404错误
  

/供应商/ 123

但如果我去

,我可以看到该页面
  

/供应商/索引/ 123

有没有办法让我以第一种方式工作?我只是使用在Global.asax中注册的默认路由。

2 个答案:

答案 0 :(得分:3)

因为这是定义默认路由的方式。如果您不想指定操作名称,可以像这样修改它:

routes.MapRoute(
    "Default",
    "{controller}/{id}",
    new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);

这就是说你可能不应该这样做,因为现在在你的路线中你没有可能指定你想要在给定控制器上调用的动作名称,这意味着你只能有一个动作每个控制器和那个动作都是索引。另一方面,如果你想在某个特定的控制器上执行此操作,你仍然可以保留默认路由并添加另一个:

routes.MapRoute(
    "Vendors",
    "vendors/{id}",
    new { controller = "Vendors", action = "Index", id = UrlParameter.Optional }
);

routes.MapRoute(
    "Default",
    "{controller}/{action}/{id}",
    new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);

答案 1 :(得分:2)

因为在您的基本路由{id}期望在操作名称之后,但您尝试将其放在控制器名称之后。

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

{id}之后更改您的路径以接受{controller}。就像@Darin描述的那样。