ASP.Net Core项目找不到其Javascript文件

问题描述 投票:0回答:1

我正在使用Visual Studio 2019和Win10来完成"The Little ASP.Net Core Book"。该项目设置为w64构建。我将其以调试模式构建为可执行文件,然后从命令窗口运行该文件。我没有使用“ dotnet”命令运行它。

我已经了解到程序正在使用数据库填充屏幕,并且可以使用屏幕向数据库添加新项目。每个项目以其自己的小形式显示,带有其名称和一个复选框。该项目的下一步不是为数据库中的每个项目提供一个“提交”按钮(这确实很笨拙),而是为每个复选框提供一个事件处理程序。这是我应该使用的Javascript文件。它名为site.js,在我项目的wwwroot / js中。

$(document).ready(function () {
    // Wire up all of the checkboxes to run markComnpleted()
    alert("Document ready function");
    $('.done-checkbox').on('click', function (e) {
        markCompleted(e.target);
    });
});

function markCompleted(checkbox) {
    alert("Mark completed function.");
    checkbox.disabled = true;
    var row = checkbox.closest('tr');
    $(row).addClass('done');
    var form = checkbox.closest('form');
    form.submit();
}

我添加了警报调用,因此可以看到该脚本实际上正在执行。首次生成网页时,将出现“文档就绪功能”消息,而当我单击复选框时,将出现“标记完成功能”消息。都没有消息发生。我猜想我错过了告诉网页使用此脚本的步骤(或者本教程错过了一步)。这是Index.cshtml文件:

<!DOCTYPE html>

@model ToDoViewModel
@using Humanizer 

@{
    ViewData["Title"] = "Manage your ToDo list";
}

<div class="panel panel-default todo-panel">
    <div class="panel-heading"> @ViewData["Title"]</div>
    <table class="table table-hover">
        <thead>
            <tr>
                <td>&#x2714;</td>
                <td>Item</td>
                <td>Due</td>
            </tr>
        </thead>

        @foreach (var item in Model.Items)
        {
            <tr>
                <td>
                    <form asp-action="MarkDone" method="post">
                        <Input type="checkbox" class="done-checkbox" />
                        <input type="hidden" name="id" value="@item.Id" />
                    </form>
                </td>
                <td>@item.Title</td>
                <td>@item.DueAt.Humanize()</td>
            </tr>
        }
    </table>

    <div class="panel-footer add-item-form">
        @await Html.PartialAsync("AddItemPartial", new ToDoItem()) 
    </div>
</div>

我的布局文件在定义页面的页脚后,在末尾指定了文件。这是相关的行:

<script src="/lib/jquery/dist/jquery.min.js"></script> 
<script src="/lib/bootstrap/dist/js/bootstrap.bundle.min.js"></script>
<script src="/js/site.js"></script>

我的布局文件shared / _layout.cshtml以此结尾:

    <script src="~/lib/jquery/dist/jquery.min.js"></script>
    <script src="~/lib/bootstrap/dist/js/bootstrap.bundle.min.js"></script>
    <script src="~/js/site.js" asp-append-version="true"></script>
    @RenderSection("Scripts", required: false)
</body>
</html>

[当我运行程序并尝试通过https://localhost:5001/todo使用它并拉起DevTools时,它显示出我的所有程序查找Javascript文件的尝试均导致404(未找到)错误。当我将鼠标悬停在DevTools网络标签上的名称site.js上时,工具提示会显示完整的文件名s https://localhost:5001/js/site.js

Reddit上一位乐于助人的人说,所有这些看起来都是正确的。为什么不起作用?您还需要我向您展示什么?

发布以上内容后,我在Microsoft Edge中进行了尝试。那里的DevTools告诉我,我还有第二条DOCTYPE行。页面来源向我展示了这一点:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="utf-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Manage your ToDo list - AspNetCoreTodo</title>
    <link rel="stylesheet" href="/lib/bootstrap/dist/css/bootstrap.min.css" />
    <link rel="stylesheet" href="/css/site.css" />
</head>
<body>
    <header>
        <nav class="navbar navbar-expand-sm navbar-toggleable-sm navbar-light bg-white border-bottom box-shadow mb-3">
            <div class="container">
                <a class="navbar-brand" href="/">AspNetCoreTodo</a>
                <button class="navbar-toggler" type="button" data-toggle="collapse" data-target=".navbar-collapse" aria-controls="navbarSupportedContent"
                        aria-expanded="false" aria-label="Toggle navigation">
                    <span class="navbar-toggler-icon"></span>
                </button>
                <div class="navbar-collapse collapse d-sm-inline-flex flex-sm-row-reverse">
                    <ul class="navbar-nav flex-grow-1">
                        <li class="nav-item">
                            <a class="nav-link text-dark" href="/">Home</a>
                        </li>
                        <li class="nav-item">
                            <a class="nav-link text-dark" href="/Home/Privacy">Privacy</a>
                        </li>
                        <li class="nav-item">
                            <a href="/ToDo">My ToDos</a>
                        </li>
                    </ul>
                </div>
            </div>
        </nav>
    </header>
    <div class="container">
        <main role="main" class="pb-3">
            <!DOCTYPE html>

我的_layout.cshtml文件具有此:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="utf-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>@ViewData["Title"] - AspNetCoreTodo</title>
    <link rel="stylesheet" href="~/lib/bootstrap/dist/css/bootstrap.min.css" />
    <link rel="stylesheet" href="~/css/site.css" />
</head>
<body>
    <header>
        <nav class="navbar navbar-expand-sm navbar-toggleable-sm navbar-light bg-white border-bottom box-shadow mb-3">
            <div class="container">
                <a class="navbar-brand" asp-area="" asp-controller="Home" asp-action="Index">AspNetCoreTodo</a>
                <button class="navbar-toggler" type="button" data-toggle="collapse" data-target=".navbar-collapse" aria-controls="navbarSupportedContent"
                        aria-expanded="false" aria-label="Toggle navigation">
                    <span class="navbar-toggler-icon"></span>
                </button>
                <div class="navbar-collapse collapse d-sm-inline-flex flex-sm-row-reverse">
                    <ul class="navbar-nav flex-grow-1">
                        <li class="nav-item">
                            <a class="nav-link text-dark" asp-area="" asp-controller="Home" asp-action="Index">Home</a>
                        </li>
                        <li class="nav-item">
                            <a class="nav-link text-dark" asp-area="" asp-controller="Home" asp-action="Privacy">Privacy</a>
                        </li>
                        <li class="nav-item">
                            <a asp-controller="ToDo" asp-action="index">My ToDos</a>
                        </li>
                    </ul>
                </div>
            </div>
        </nav>
    </header>
    <div class="container">
        <main role="main" class="pb-3">
            @RenderBody()
        </main>
    </div>

所以,看起来对RenderBody()的调用不起作用。我在项目中看不到该方法的定义。是我需要自己写的东西,还是应该自动生成?

asp.net asp.net-core
1个回答
0
投票

我认为您应该在cshtml页面的末尾添加此内容

@section Scripts {
    <script>
    $(document).ready(function () {
       // Wire up all of the checkboxes to run markComnpleted()
       alert("Document ready function");
       $('.done-checkbox').on('click', function (e) {
           markCompleted(e.target);
       });
    });        
    </script>
}

并将markCompleted保留到您的js文件中。但是,如果此功能是针对此页面的,那么我看不出有单独的JS的正当理由

热门问题
推荐问题
最新问题