【问题标题】:Correct route used just URLs are wrong. MVC 3 routing.仅使用 URL 的正确路由是错误的。 MVC 3 路由。
【发布时间】:2012-01-09 14:23:36
【问题描述】:

我正在创建一个商务网站,但遇到了类别内多个类别的问题。我的 ActionLink 将进入正确的类别,但有时它们会在末尾放置一个多余的查询字符串。这并不总是发生,只有在子类别中才会发生(我理解 actionlink 试图从任何地方提取路由值,但见下文)

我已经简化了一点,以确保我没有遗漏任何东西,但我遇到了同样的问题:

routes.MapRoute(
    "Store1",
    "store/{tier1Category}/{tier2Category}/{categoryId}",
    new { controller = "Store", action = "Index"},
    new { categoryId = @"\d+" }
);

routes.MapRoute(
    "Store",
    "store/{tier1Category}/{categoryId}",
    new { controller = "Store", action = "Index"},
    new { categoryId = @"\d+" }
);

我为类别链接创建了一个 HtmlHelper 扩展:

public static MvcHtmlString CategoryLink(this HtmlHelper helper, Category category)
{
    .........

    return helper.ActionLink(category.Name, "Index", "Store", new { tier1Category = tier1Category, tier2Category = tier2Category, categoryId = category.CategoryID }, null);
}

(截取的代码只是获取tier1Category & tier2Category)

所以在主页上我有一个导航菜单,例如:

http://localhost/store/tshirt/1

现在,如果我要进入该类别的子类别 (http://localhost/store/tshirt/men/2),导航中的相同链接将是:

http://localhost/store/tshirt/1?tier2category=men

现在更令人困惑的是,当我调试上面的扩展方法时,在这种情况下,返回的操作链接是“http://localhost/store/tshirt/1”,即正确!因此,当它吐出 html 时,从扩展返回的 MvcHtmlString 似乎发生了一些事情。另外应该注意的是,链接仍然指向正确的位置。

任何帮助都会很棒,因为我有点把头发拉出来了......

【问题讨论】:

    标签: asp.net-mvc-3 model-view-controller


    【解决方案1】:

    我创建了一个插入了这个确切代码的项目。当然,我用代码替换了助手中的点以填充缺失的变量。生成的 url 完全符合您的要求,而不是查询字符串。所以在那个笔记上,谁知道呢。

    然而,至于手头的问题,我觉得你在 url 中包含 categoryId 有点奇怪。这不是类别字符串应该处理的吗?如果是这种情况,您可以通过一条商店路线稍微收紧一些:

    routes.MapRoute(
        "Store",
        "store/{tier1Category}/{tier2Category}",
        new { controller = "Store", action = "Index", tier2Category = UrlParameter.Optional }
    );
    

    现在您不会在 url 中添加信息,您可以使用末尾的数字进行分页或其他有用的东西。我认为这些网址看起来更干净:

    http://localhost/store/tshirt
    http://localhost/store/tshirt/mens

    【讨论】:

    • 如果有任何用处,则问题发生在 _layout 包含部分视图的 tier1Category 索引页面视图上;包含所有类别的导航视图。就我最初使用你的方法的 URL 字符串中的 id 而言,我决定走另一条路,因为我觉得 linq 查询有点矫枉过正:
    • 检索类别时。即从 tier1Category 向下钻取到 tierXCategory。我同意它看起来更干净,这是我的一个抱怨。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-30
    • 1970-01-01
    • 1970-01-01
    • 2017-02-03
    • 2012-07-06
    • 1970-01-01
    相关资源
    最近更新 更多