使用MVC中的破折号路由可选参数

时间:2010-05-20 11:48:32

标签: asp.net-mvc asp.net-mvc-routing

我做了这样的路由定义:

 routes.MapRoute("ProductSearch", "Search-{MainGroup}-{SubGroup}-{ItemType}",
   new {
    controller = "Product",
    action = "Search",
    MainGroup = "", SubGroup = "", ItemWebType = ""});

如果参数为空,则无效。 实际上它解析了url,所以Url.Action方法解析了路径“Search-12--”但链接不起作用,所以页面的GET无法正常工作

使用斜杠工作Url.Action方法使“Search / 12”

"Search/{MainGroup}/{SubGroup}/{ItemType}"

是否有可能纠正它?

我使用默认的mvc项目制作了一个示例: 仅添加: 在默认路线之前:

    routes.MapRoute(DefaultSearch", "Search-{MainGroup}-{Subgroup}-{ItemType}",
        new {controller = "Home",action = "About", MainGroup = "", 
              Subgroup = "", ItemType = ""});

in Home / index.aspx:

<a href="<%=Url.Action("About", "Home", new {maingroup = "2", subgroup = "", itemType = ""}) %>">
    Search</a>

在HomeController中:

public ActionResult About(string maingroup, string subgroup, string itemtype)
{
  return View();
}

点击链接和404

1 个答案:

答案 0 :(得分:1)

您使用的是哪个版本?在mvc 2中,您可以使用UrlParameter.Optional作为路由的默认值。