当您使用它创建新模型时,某些版本的 Visual Studio 自动为您生成的视图文件之间似乎存在不匹配。我使用新的 VS 2013 社区版并在http://www.w3schools.com/aspnet/mvc_app.asp浏览 W3Schools 教程时遇到了这个问题,但上面的评论表明它不是教程方向或与VS的单一版本。
确实,您只需删除
@Scripts.Render("~/bundles/jqueryval")
Visual Studio 自动生成的创建/编辑布局中的行。
但是该解决方案并没有解决根本原因,也没有让您在完成本教程的过程中做更多的事情。在实际应用程序开发的某个时间点(可能相当早),您将希望访问注释掉解决方案从您的应用程序中删除的 jquery 验证代码。
如果您使用 VS 为您创建新模型,它还会创建一组五个视图文件:创建、删除、详细信息、编辑和索引。其中两个视图 Create 和 Edit 旨在让用户为模型基础的数据库记录中的字段添加/编辑数据。对于真实应用程序中的这些视图,您可能希望在将记录保存到数据库之前使用 jquery 验证库进行一些数据验证。这就是VS添加以下行的原因
@section Scripts {
@Scripts.Render("~/bundles/jqueryval")
}
到这两个视图的底部,而不是其他视图的底部。自动生成的代码试图使验证库可用于这些视图,但不能用于其他视图。
发生错误是因为 VS 要么没有向共享的 _Layout.cshtml 文件添加相应的行,要么参见上面的一个答案,添加它但将其注释掉。这条线是
@RenderSection("scripts", required: false)
如果您的某些视图有一个脚本部分(如 Create 和 Edit 所做的),则必须在布局中嵌入一个 RenderSection 命令。如果有些脚本有节而有些没有(因为 Delete、Details 和 Index 没有),则 RenderSection 命令必须有required: false
参数。
因此,最好的解决方案是,如果您想做的不仅仅是完成本教程的学习,就是将语句添加到 _Layout.cshtml,而不是从 Edit 和 Create 视图中删除代码。
PS 这有点令人困惑,这里需要的是一个“捆绑包”,而 require 语句看起来像是试图在项目中不存在的捆绑包文件夹中包含一个文件。但是,对于调试版本和教程,这无关紧要,因为捆绑的文件一次包含一个。请参阅:http ://www.asp.net/mvc/overview/performance/bundling-and-minification这里有争议的代码在页面下方大约三分之二处被简要提及。