【发布时间】:2012-03-06 15:55:15
【问题描述】:
我们在一个项目中使用区域。我们还使用此修复来替换页面名称中的破折号
routes.Add(
new Route("{controller}/{action}/{id}",
new RouteValueDictionary(
new { controller = "Home", action = "Index", id = UrlParameter.Optional }),
new HyphenatedRouteHandler())
);
public class HyphenatedRouteHandler : MvcRouteHandler
{
protected override IHttpHandler GetHttpHandler(RequestContext requestContext)
{
requestContext.RouteData.Values["controller"] = requestContext.RouteData.Values["controller"].ToString().Replace("-", "_");
requestContext.RouteData.Values["action"] = requestContext.RouteData.Values["action"].ToString().Replace("-", "_");
return base.GetHttpHandler(requestContext);
}
}
此修复适用于普通顶级页面。主页/某些页面。 但是当涉及到一个区域时,这不再有效。我尝试将 AreaRegistration.cs 文件修改为与 Global.asax.cs 路由等效,但这也不起作用。我可以用 [ActionName("some-page")] 重命名页面,但它不能解决控制器仍然有下划线 Area/some_folder/some-page 的问题,我不希望我的 URL 看起来像那样。
编辑: 当我使用 Darin Dimitrov 建议的路线时,我收到此错误:
找到了多个与名为“page”的控制器匹配的类型。如果为该请求提供服务的路由 ('admin/{controller}/{action}/{id}') 未指定命名空间来搜索与请求匹配的控制器,则可能会发生这种情况。如果是这种情况,请通过调用采用“命名空间”参数的“MapRoute”方法的重载来注册此路由。
我们有多个名称相同但内容不同的“细分”来定位细分受众
【问题讨论】:
标签: asp.net asp.net-mvc-3