Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在ASP.NET Core 2.1 MVC中生成根级别链接?_C#_Asp.net Core - Fatal编程技术网

C# 如何在ASP.NET Core 2.1 MVC中生成根级别链接?

C# 如何在ASP.NET Core 2.1 MVC中生成根级别链接?,c#,asp.net-core,C#,Asp.net Core,ASP.NET Core 2.1 MVC应用程序具有以下路由规则: routes.MapRoute( name: "blog_list_year_month_paged", defaults: new { controller = "Blog", action = "Index", page = (int?)null, }, template: "blog/{year}/{month}/page/{page}"

ASP.NET Core 2.1 MVC应用程序具有以下路由规则:

routes.MapRoute(
    name: "blog_list_year_month_paged",
    defaults: new { 
        controller = "Blog", 
        action = "Index", 
        page = (int?)null,
    },
    template: "blog/{year}/{month}/page/{page}");
routes.MapRoute(
    name: "blog_post",
    defaults: new { 
        controller = "Blog", 
        action = "BlogPost" 
    },
    template: "blog/{year}/{month}/{codename}");
routes.MapRoute(
    name: "blog_list_year_month",
    defaults: new { 
        controller = "Blog", 
        action = "Index", 
        year = (int?)null, 
        month = (int?)null,
        page = (int?)null,
    },
    template: "blog/{year?}/{month?}");
母版页具有以下链接:

<a asp-controller="Blog" class="nav-link">Blog</a>
博客
该链接重用当前页面的
页面
变量的值。例如,如果当前页面是主页,则路由将生成一个链接,该链接涉及当前
页面
值为
/Index
,因为主页是一个名为Index的页面(位于/Pages文件夹中)。如果当前页面是特定的博客文章,则生成的url为
/blog/2018/2/blog post title

如何有效地表示该链接应该是根链接,即它应该始终生成
/blog
url


我已经提出了将所有可能的变量设置为<代码> null <代码>(通过<代码> ASP路由月< /代码>等),但我不认为这是一个好的解决方案。我也知道我可能可以使用路由名称,但我更希望在这种情况下不使用它们。

对于生成根URL的一个选项,请尝试直接使用href创建
标记a
,如下所示:

<li><a href="/Blog">Blog</a></li>
@{
    var NullRoute = new Dictionary<string, string> { { "year", null } };
}

 <li><a asp-controller="Blog" asp-all-route-data="@NullRoute" class="nav-link">Blog</a></li>
  • 对于与当前解决方案类似的另一个选项,请尝试定义空路由值并按如下方式传递:

    <li><a href="/Blog">Blog</a></li>
    
    @{
        var NullRoute = new Dictionary<string, string> { { "year", null } };
    }
    
     <li><a asp-controller="Blog" asp-all-route-data="@NullRoute" class="nav-link">Blog</a></li>
    
    @{
    var NullRoute=newdictionary{{“year”,null};
    }
    
  • 创建您自己的标记帮助程序以生成预期的html内容。

    谢谢您的建议。如果我理解正确,您不知道如何优雅地告诉ASP.NET在生成路由url时忘记当前页面的上下文。您的
    期望优雅地
    什么?这与
    页面的上下文无关。如果按F12键检查
    Blog
    的生成URL,则如果当前URL为
    Blog/2
    ,则它已转换为
    Blog/2
    。是的,它转换为
    Blog/2
    ,因为当前页面的上下文将其
    page
    路由变量设置为
    2
    。我想说的是,这个链接不应该继承当前页面的
    page
    值(或其他值)。类似地,如果我编写
    href=“/blog”
    ,则当前页面的查询参数不会被继承。