繁体   English   中英

新区域是 Razor Pages 不显示根 _Layout.cshtml 文件

[英]New Area is Razor Pages is not displaying the root _Layout.cshtml file

我正在为 asp.net 核心开发一个新的 Razor Page 应用程序。

问题:我添加了一个新的 Area 文件夹 (TeamDrawing),但是当我将 _ViewStart.cshtml 放在 Area/TeamDrawing/Pages 文件夹或 Area 中时,对 Root/Pages/Shared/_Layout.cshtml 页面的引用不起作用/TeamDrawing 文件夹。

我在 Area/Identity 文件夹中使用 asp.net 身份(内置于我使用的模板),它引用 Root/Pages/Shared/_Layout.cshtml 没有问题。

我究竟做错了什么?

我想在我的所有区域文件夹中使用我的 Root/Pages/Shared/_Layout.cshtml。

这是我的区域文件夹:

![在此处输入图片描述

这是根页面文件夹:

![在此处输入图片描述

更新:

我的问题似乎是另外一回事。 我没有意识到我遇到了 F12 控制台错误。 Root/Pages/Shared/_Layout.cshtml 调用一些代码来加载我的菜单项,路径试图将 go 更改为 Area/TeamDrawing 中的 controller,而不是根目录中的 Controller。 我需要弄清楚如何指向根/控制器。

所以指向根目录中的 _Layout 似乎没问题。

更新 2:

如果我将直接 URL 放在get调用中,它将起作用。

有没有办法我不能把直接的URL放在URL里面

作品:

    $.get(BuildSafeURL("https://localhost:44355/ToolbarMenu/LoadToolbarMenuItems", null))
        .done(function (data) {

        });

中断是因为它试图在 Area/TeamDrawing 中将 go 转换为 controller:

  $.get(BuildSafeURL("ToolbarMenu/LoadToolbarMenuItems", null))
        .done(function (data) {
        
        });

我在我的 Root/_Layout 文件中试过这个:

    <script type="text/javascript">
        // Global variable for relative pathing for ajax calls
        var rootPath = '@Url.Content("~")';
    </script>

但这不适用于rootPath

如果您不想在 Area/TeamDrawing 中将 go 转为 controller,请尝试使用:

$.get(BuildSafeURL("/ToolbarMenu/LoadToolbarMenuItems", null))
        .done(function (data) {
        
        });

我现在有它的工作:

完整代码:

根 _Layout.cshtml:

@using Microsoft.Extensions.Configuration
@inject IConfiguration Configuration
    <script>      
         const rootPath = @Json.Serialize(@Configuration.GetSection("ApiUrls").GetSection("commonUrl").Value + "/")
    </script>

应用设置.js

{
  "ApiUrls": {
    "commonUrl": "https://localhost:44355"
  }
}

app.js -> BuildSafeUrl()(在调用 controller get菜单项时使用)

function BuildSafeURL(serverPath, parameterCollection) {

    // Validate the serverPath is well formed
    serverPath = ValidateServerPath(serverPath);

    // Append the rootPath to handle virtual directory pathing
    var path = rootPath + serverPath;

    // Encode and append any search parameters
    if (parameterCollection && parameterCollection.length > 0) {
        path += "?";

        var searchParameters = new URLSearchParams();

        for (var i = 0; i < parameterCollection.length; i++) {

            var key = parameterCollection[i].Key;
            var value = parameterCollection[i].Value;

            searchParameters.append(key, encodeURIComponent(value));
        }

        path += searchParameters.toString();
    }
    return path;
}

function ValidateServerPath(serverPath) {
    if (!serverPath) {
        return '';
    }
    else if (serverPath === '/') {
        return '';
    }
    else if (serverPath.charAt(0) === '/') {
        return serverPath.substring(1);
    }
    else {
        return serverPath;
    }
}

toolbarMenu.js -> 我在 Area/TeamDrawing 文件夹中的位置,并在根目录上调用 controller(在 Area 文件夹之外)

function loadToolbarMenuList() {
    $.get(BuildSafeURL("ToolbarMenu/LoadToolbarMenuItems", null))
        .done(function (data) {
          
        })
        .fail(error =>
        {
            console.log(error);
        })
}

现在我的菜单项在 Area/TeamDrawing/Pages/GenerateChristmasList 上正确显示

在此处输入图像描述

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM