0

Web サイトに 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 の呼び出しが間違っています。最初のパラメーターは、2 番目のパラメーターに置き換えられる古い値です。

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 に答える