这是我目前的路线
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的操作,我想将请求指向特定的操作并加载 - from-db成为该操作的参数。在该操作中,我将基于参数从数据库中读取内容,然后返回视图。如果我指定一个存在的动作,那么它只会调用该动作。
任何帮助?
答案 0 :(得分:1)
首先注意 - 路由引擎将按您列出的顺序应用路由,检查每个路由,如果不匹配则继续。您当前将“默认”路由设置为全能 - 如果找不到它使用“MarketingSite”的控制器,如果没有它使用“index”的操作。如果我理解您的问题,您根本不想要“索引”操作,您想要调用另一个操作,并将查询传递给它。
你可以尝试:
//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中映射您的路线可能有点棘手。您应该检查此this,并相应地设计您的路线。
希望有所帮助, 克里斯
答案 1 :(得分:0)
覆盖HandleUnknownAction
控制器上的MarketingSite
方法:
protected override void HandleUnknownAction(string actionName) {
// TODO: check for actionName in database
}