2

这是我目前的路线

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

所以每当我访问 domain.com/test

这将调用名为 MarketingSite 的控制器中的测试操作。

我想要实现的是当我访问 domain.com/load-from-db 并且由于我没有名为 load-from-db 的操作,我想将请求定向到特定操作和 load-from-db成为该动作的参数。在该操作中,我将根据参数从数据库中读取一些内容,然后返回一个视图。如果我指定一个存在的动作,那么它只会调用那个动作。

有什么帮助吗?

4

2 回答 2

1

首先注意 - 路由引擎将按照您列出的顺序应用路由,检查每个路由,如果无法匹配则继续。您当前将“默认”路由设置作为包罗万象的内容 - 如果找不到控制器,则使用“MarketingSite”,如果没有操作,则使用“索引”。如果我理解您的问题,您根本不需要“索引”操作,您想调用另一个操作,并将查询传递给该操作。

你可以试试:

//Look for a matching action        
routes.MapRoute(
                    "MatchAction", // Route name
                    "{action}/{id}",
                     new { controller = "MarketingSite", id = UrlParameter.Optional}                                    
                );

//With a single segment, pass that to a specific action as a parameter.
routes.MapRoute(
                    "load-from-db",  // Route name
                    "{load-from-db}", // URL with parameters
                    new { controller = "MarketingSite", action = "MyAction"}
                );

//With no segments (ex. domain.com/) use the Index on MarketingSite as default.
routes.MapRoute(
                    "Default", // Route name
                    "", // URL with parameters
                    new { controller = "MarketingSite", action = "Index"}
                );

但是,这些路由可能无法完全满足您的要求 - 在 MVC 中映射您的路由可能有点棘手。您应该检查这一点,并相应地设计您的路线。

希望有帮助,克里斯

于 2012-09-14T17:59:04.203 回答
0

覆盖控制器HandleUnknownAction上的方法MarketingSite

protected override void HandleUnknownAction(string actionName) {
   // TODO: check for actionName in database
}
于 2012-09-14T23:45:40.253 回答