【问题标题】:Link generation not creating proper links to and within area链接生成未在区域内和区域内创建正确的链接
【发布时间】:2018-09-08 19:03:12
【问题描述】:

我有一个 ASP.NET Core 项目,其中只有一个名为 Data 的区域。默认的Home 控制器仍然不在任何区域。

问题

项目中Data区域的链接不起作用。路由工作正常。

如果我手动输入链接 localhost/Data,我会得到控制器 Home 区域 Data 的正确操作 Index。所以路由肯定有效。

但是,<a asp-area="Data" asp-controller="Home" asp-action="Index">Data</a> 被评估为链接 localhost/?area=Data,它不起作用,实际上应该是 localhost/Data

Data 区域内的链接也未正确评估。 localhost/Data/Controller 应该是 localhost/Controller。再次手动输入链接工作正常。

配置

到目前为止,我如何配置项目以尝试使链接正常工作: - 路线添加如下

app.UseMvc(routes =>
{
    // Default Route
    routes.MapRoute(
        name: "default",
        template: "{controller=Home}/{action=Index}/{id?}"
    );
    // Area Route
    routes.MapRoute(
        name: "areas",
        template: "{area:exists}/{controller=Home}/{action=Index}/{id?}"
    );
});
  • Data 中的所有控制器都具有[Area("Data")] 属性。
  • 区域/数据/视图中添加了 TagHelper _ViewImport.cshtml @addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers

我通常尝试关注official documentation,但似乎没有任何效果。

问题

所以我显然想让链接在不“硬编码”的情况下工作,我想知道为什么预期的行为似乎不起作用。

感谢任何提示。

【问题讨论】:

    标签: c# razor asp.net-core razorengine


    【解决方案1】:

    您需要更改路线的顺序。您应该从更具体的路线开始,然后再到更一般的路线:

    app.UseMvc(routes =>
    {
        // More specific area route
        routes.MapRoute(
           name: "areas",
           template: "{area:exists}/{controller=Home}/{action=Index}/{id?}"
        );
        // Any other (default)
        routes.MapRoute(
            name: "default",
            template: "{controller=Home}/{action=Index}/{id?}"
        );
    

    });

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多