我们正在将区域用于项目。而且我们还使用此修补程序替换页面名称中的破折号MVC3区域如何在页面名称中使用破折号
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季米特洛夫建议我得到这个错误路线:
多种类型的发现命名为“页”控制器匹配。如果为该请求提供服务的路由('admin/{controller}/{action}/{id}')没有指定命名空间来搜索与该请求匹配的控制器,则会发生这种情况。如果是这种情况,请通过调用带有'namespaces'参数的'MapRoute'方法的重载来注册此路由。
我们必须具有相同的名称,但不同内容的多个“段”为目标的段观众
这就是我重写它的方式,它似乎没有工作。我得到了404。我仍然可以在名称中使用_时进入页面,但是 - 版本给了我404。 – ddilsaver 2012-03-06 16:13:39
其实我得到一个错误。我正在编辑帖子,以便您可以看到它。 – ddilsaver 2012-03-06 16:17:51
@ddilsaver,它看起来你有多个区域定义相同的控制器。您将需要使用命名空间约束来解决这些冲突。我已更新我的帖子,以说明如何实现这一目标。 – 2012-03-06 16:46:35