0

我正在为我的网站使用 asp.net MVC 3,我想用我的地址中的破折号替换下划线。我能做到 。但是当我想在一个区域内更换它们时,我做不到。

谁能帮我 ?

这是我的代码:

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

这是我的区域路线:

context.MapRoute(
                "products_default",
                "products/{controller}/{action}",
                new { controller = "All", action = "Index" }
            );

我想浏览这个地址:

本地主机:1559/products/store-builder/boronz

产品是我的地区名称。当然,当我浏览这个地址时:

本地主机:1559/products/store_builder/boronz

它显示页面。

编辑 :

我将它用于我的区域路线,但它无法检测到这是一个区域:

//context.Routes.Add(
//    new Route("products/{controller}/{action}",
//    new RouteValueDictionary(
//        new { controller = "", action = "Index" }),
//        new MyProject.MvcApplication.HyphenatedRouteHandler())
//);

我怎样才能解决这个问题 ?

4

2 回答 2

1

我认为你有一个简单的选择是调整你的路线:

context.MapRoute(
    "products_default",
    "products/store-builder/{action}",
    new { controller = "YourControllerName", action = "Index" }
); 

但是,这样做的缺点是,随着控制器数量的增加,您将需要创建大量路由。另外,我可能在这里回答了一个类似的问题,它创建了一个自定义路由处理程序,就像您的示例开始一样。

于 2012-10-23T15:32:03.550 回答
0

您调用 string.replace 错误:第一个参数是将被第二个参数替换的旧值。

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); 
        } 
    } 
于 2012-10-23T09:33:29.537 回答