我在我的网站上使用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 /产品/存储助洗剂/ boronz
产品是我的地区名称。当然,当我浏览这个地址时:
本地主机:1559 /产品/ store_builder / boronz
显示页面。
编辑:
我将它用于我的区域路线,但它无法检测到这是一个区域:
//context.Routes.Add(
// new Route("products/{controller}/{action}",
// new RouteValueDictionary(
// new { controller = "", action = "Index" }),
// new MyProject.MvcApplication.HyphenatedRouteHandler())
//);
我该如何解决这个问题?
答案 0 :(得分:1)
我认为您可以轻松选择调整路线:
context.MapRoute(
"products_default",
"products/store-builder/{action}",
new { controller = "YourControllerName", action = "Index" }
);
然而,这样做的缺点是,随着控制器数量的增长,您将需要创建大量路径。此外,我可能已经回答了类似的问题here,它会像您的示例一样创建自定义路径处理程序。
答案 1 :(得分: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);
}
}