C# 为什么相同的ActionLink在“布局和控制器”中呈现方式不同;你的观点是什么?

C# 为什么相同的ActionLink在“布局和控制器”中呈现方式不同;你的观点是什么?,c#,asp.net-core,razor-pages,C#,Asp.net Core,Razor Pages,我在.net核心mvc应用程序的两个部分中有相同的@Html.ActionLink,但为什么它们的呈现方式不同呢 启动: endpoints.MapControllerRoute( name: "products", pattern: "product-category/{title}", defaults: new { controller = "ProductCategories", action = "ProductsR

我在.net核心mvc应用程序的两个部分中有相同的@Html.ActionLink,但为什么它们的呈现方式不同呢

启动:

endpoints.MapControllerRoute(
name: "products",
pattern: "product-category/{title}",
defaults: new { controller = "ProductCategories", action = "ProductsRelatedToCategory", pg = 1 });
public async Task<IActionResult> ProductsRelatedToCategory(int? cat, int? pg)
{
    // using cat to get which category is clicked and pg to get which page it is (in paginated list)
}
@Html.ActionLink(
    linkText,
    "ProductsRelatedToCategory",
    "ProductCategories",
    null,
    null,
    null,
    new { cat = 14, pg = 1, title = "power-tools" },
    new { @class = "menuProductLink" })
@Html.ActionLink(
    "Next",
    "ProductsRelatedToCategory",
    "ProductCategories",
    null,
    null,
    null,
    new { cat = productCategory.Id, pg = currentPage + 1, title = "power-tools" },
    new { @class = "paginate" })
行动:

endpoints.MapControllerRoute(
name: "products",
pattern: "product-category/{title}",
defaults: new { controller = "ProductCategories", action = "ProductsRelatedToCategory", pg = 1 });
public async Task<IActionResult> ProductsRelatedToCategory(int? cat, int? pg)
{
    // using cat to get which category is clicked and pg to get which page it is (in paginated list)
}
@Html.ActionLink(
    linkText,
    "ProductsRelatedToCategory",
    "ProductCategories",
    null,
    null,
    null,
    new { cat = 14, pg = 1, title = "power-tools" },
    new { @class = "menuProductLink" })
@Html.ActionLink(
    "Next",
    "ProductsRelatedToCategory",
    "ProductCategories",
    null,
    null,
    null,
    new { cat = productCategory.Id, pg = currentPage + 1, title = "power-tools" },
    new { @class = "paginate" })
按预期呈现权利:

“url 1”:{domain}/产品类别/电动工具?cat=14

在控制器视图(ProductsRelatedLocategory.cshtml)中用作分页中的下一页链接:

endpoints.MapControllerRoute(
name: "products",
pattern: "product-category/{title}",
defaults: new { controller = "ProductCategories", action = "ProductsRelatedToCategory", pg = 1 });
public async Task<IActionResult> ProductsRelatedToCategory(int? cat, int? pg)
{
    // using cat to get which category is clicked and pg to get which page it is (in paginated list)
}
@Html.ActionLink(
    linkText,
    "ProductsRelatedToCategory",
    "ProductCategories",
    null,
    null,
    null,
    new { cat = 14, pg = 1, title = "power-tools" },
    new { @class = "menuProductLink" })
@Html.ActionLink(
    "Next",
    "ProductsRelatedToCategory",
    "ProductCategories",
    null,
    null,
    null,
    new { cat = productCategory.Id, pg = currentPage + 1, title = "power-tools" },
    new { @class = "paginate" })
呈现不正确,如预期:

“url 2”:{domain}/ProductCategories/productsratedtocategory?cat=14&pg=2&title=power tools


两个url都工作正常,但实际上我想显示类似“url 1”的url,为什么它们呈现不同?

那么您的意思是要从url中删除
title=power tools
,但保留
pg
?您使用的是区域吗?您使用的是什么版本的ASP.NET Core?我已经使用v3.1测试了您的代码(仅在您没有共享模型时使用示例1中的路由数据),并且它按预期工作,即视图中的ActionLink与\u Layout.cshtml中的ActionLink相同。您是否尝试过使用示例2中相同的路线数据来排除这种情况?@Stefan不,我不需要,因为我的路线是定制的,可以在显示url中显示标题。我需要将title、pg和id传递给控制器,但title将在url路由中,pg、id将作为参数,因此看起来像:域/产品类别/title?id=1&pg=1@mjwills不,我没有,也不知道这是否有帮助。请举个例子,谢谢