0

像这样的网址:

/query/test/p1s1c1

行动是:

public ActionResult Test(int price = 1, int size = 1, int category = 1)
{
    ViewBag.param = "price:" + price + "size:" + size + "category" + category;
    return View();
}

我的路线映射是:

routes.MapRoute(
    "Query", // Route name
    "Query/test/p{price}s{size}c{category}",
    new { controller = "Query", action = "Test", price = UrlParameter.Optional, size = UrlParameter.Optional, category = UrlParameter.Optional },
    new { price = @"\d+", size = @"\d*" , category = @"\d*" } // Parameter defaults 
    );

但它不起作用,谁能帮助我?

4

2 回答 2

1

当框架处理 URL 请求时,它会尝试按照Routes添加到RouteCollection.

因此,将您的路线放在默认路线之前,它应该可以工作:

routes.MapRoute(
                "Query", // Route name
                ///...
                );

routes.MapRoute(
                "Default", // Route name
                ///...
               );

现在带有 url :/query/test/p2s2c2执行的 Test 操作将具有参数:price = 2, size = 2, category = 2

您可以阅读有关如何将 URL 与路由匹配的更多信息。

于 2012-04-28T05:58:59.667 回答
0

试试这个...

routes.MapRoute(
    "Query", // Route name
    "Query/test/{price}/{size}/{category}",
    new { controller = "Query", action = "Test", price = UrlParameter.Optional, size = UrlParameter.Optional, category = UrlParameter.Optional },
    new { price = @"\d+", size = @"\d*" , category = @"\d*" } // Parameter defaults 
    );

在那个默认路由之后....

于 2012-04-28T06:08:14.193 回答