【问题标题】:Html.Routelink output - ASP.NET C# MVCHtml.Routelink 输出 - ASP.NET C# MVC
【发布时间】:2009-03-17 17:42:55
【问题描述】:

我的电话如下所示:

<%= Html.RouteLink(item.displayName, "DisplayCategory", new { category = Html.Encode(item.displayName), subcat = item.searchName }) %>

我得到的 html 看起来像这样:

http://localhost:1485/Home/ShowCategory/Electronics%20&%20Photography?subcat=electronics-photo

为什么 URL 以“?subcat=electronics-photo”而不是“/electronics-photo”结尾?它与路由定义有某种关系吗?

   routes.MapRoute(
        "DisplayCategory",
        "Home/ShowCategory/{category}/{tags}",
        new { controller = "Home", action = "ShowCategory", category = "", tags = "" }
    );

任何线索将不胜感激!

【问题讨论】:

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


    【解决方案1】:

    如果查询字符串与路由定义中的参数之一不匹配,则 MVC 路由会在查询字符串上添加。尝试将 subcat 添加到您的路线:

    routes.MapRoute(
            "DisplayCategory",
            "Home/ShowCategory/{category}/{tags}/{subcat}",
            new { controller = "Home", action = "ShowCategory", category = "", tags = "", subcat = "" }
        );
    

    【讨论】:

      【解决方案2】:

      我只是试一试,但看起来你正在使用 MVC 框架。

      其中每个控制器都有一个动作,在本例中为 ShowCategory,默认情况下它们采用查询字符串,在本例中为类别。 MVC 有目的地抽象了文件夹结构。我相信 MVC 应用程序将始终具有这种类型和深度的 URL domain.ext/Controller/Action?queryString。

      我认为问题可能是 subcat 是否设置正确。更多信息/代码可能是有希望的。

      也很抱歉没有解决您问题的路由部分。

      【讨论】:

      • 感谢您的回复。是的,我正在使用 MVC ...我感到困惑的是为什么它会创建 ?queryString 而不是仅仅添加另一个 '/' 并制作 /queryString。
      • MVC 使用查询字符串将参数传递给操作。 '/' 仅用于访问子文件夹,但在 MVC 中,您只有控制器和操作文件夹。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-22
      • 2010-09-27
      • 1970-01-01
      • 2013-11-13
      • 2010-10-14
      相关资源
      最近更新 更多