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