【问题标题】:Routing optional parameters with dashes in MVC在 MVC 中使用破折号路由可选参数
【发布时间】:2011-02-21 20:00:06
【问题描述】:

我做了一个这样的路由定义:

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

在 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

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

    • 不幸的是 MVC 1。我通过完全覆盖 RouteBase 类的 GetVirtualPath 和 GetRouteData 函数完全解决了我的问题
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-06
    • 2017-09-24
    相关资源
    最近更新 更多