将参数传递给Index视图

本文关键字:视图 Index 参数传递 | 更新日期: 2023-09-27 18:09:34

非常基本的问题。当我试图查看

时,为什么会出现404错误?

/供应商/123

但是如果我点击

我可以看到页面

/供应商/索引/123

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

将参数传递给Index视图

因为默认路由就是这样定义的。如果你不想指定一个动作名,你可以这样修改它:

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

这就是说你可能不应该这样做,因为现在在你的路由中,你无法指定你希望在给定控制器上调用的动作名称,这意味着你只能在每个控制器上有一个动作,该动作将是Index。另一方面,如果你想在某些特定的控制器上这样做,你仍然可以保留默认路由并添加另一个:

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 }
);

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

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

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