asp.net - ASP.Net Core 项目找不到它的 Javascript 文件
问题描述
我正在使用 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>✔</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 上时,工具提示会显示完整的文件名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() 的调用不起作用。我在我的项目中没有看到该方法的定义。它是我需要自己写的东西,还是应该自动生成?
我被要求提供 csproj 文件。这里是:
<Project Sdk="Microsoft.NET.Sdk.Web">
<PropertyGroup>
<TargetFramework>netcoreapp3.1</TargetFramework>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Humanizer" Version="2.7.9" />
<PackageReference Include="Microsoft.AspNetCore.Identity.EntityFrameworkCore" Version="3.1.3" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Sqlite" Version="3.1.3" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="3.1.3">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
<PackageReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Design" Version="3.1.1" />
</ItemGroup>
<ItemGroup>
<Folder Include="Data\" />
</ItemGroup>
<ItemGroup>
<None Include="Views\ToDo\AddItemPartial.cshtml" />
</ItemGroup>
</Project>
解决方案
推荐阅读
- c# - 如何使用 EditTemplate 绑定到 Blazorise DataGrid 中的 TextEdit
- python - 将带有 if 条件的 for 循环转换为列表理解
- node.js - Node js 应用程序的 Azure 部署失败:npm ERR!代码 EPERM
- android - 如何在 Kotlin 中生成标记数组
- azure - Azure devops 代理池与并行作业
- terminal - PowerLevel10k 和 ColorLS 符号未显示,如何解决此问题
- java - Java立即调用我在数组中初始化的方法
- r - 从 gmodels 中的 CrossTable 函数制作 corrplot
- python - 在 python pandas 中,如何合并两个数据帧,同时使用另一个数据帧的权重将值传播到一个数据帧中?
- python - [:] 有什么作用?