为什么我的视图不从_Layout.cshtml加载jquery代码,但是当我将它添加到视图中时呢?

为什么我的视图不加载从Layout.cshtmlinheritance的Jquery?

当我在视图中将本地链接放到jquery时,它可以工作,但不是。

_Layout.cshtml:

     @ViewBag.Title - My ASP.NET Application       
@RenderBody()
@*

© @DateTime.Now.Year - My ASP.NET Application

*@

视图:

 @model HimHer.Models.Stories @{ ViewBag.Title = "Authenticate"; Layout = "~/Views/Shared/_Layout.cshtml"; } @Html.AntiForgeryToken() 

Stories


@Html.LabelFor(model => model.UserName, htmlAttributes: new { @class = "control-label col-md-2" })
@Html.TextBoxFor(model => model.UserName, new { @class = "form-control white" })
@Html.LabelFor(model => model.Password, htmlAttributes: new { @class = "control-label col-md-2" })
@Html.TextBoxFor(model => model.Password, new { @class = "form-control white" })
function save() { var u = { UserName: "Hunain", Password: "123" }; var users = JSON.stringify(u); $.ajax ({ url: '@Url.Action("Authenticate", "Users")', type: 'POST', contentType: "application/json; charset= utf-8", data: users, dataType: 'json', success: function (results) { alert(results.UserName); //$('#myModal').modal('hide'); } }); }

我尽我所能,但根本不起作用。 帮助我。

我在渲染后检查页面源,但仍然是脚本在ajax代码下面。

这看起来像加载脚本的顺序和它所需的依赖项(在这种情况下是jQuery)的问题。 查看页面的视图源时,可以看到在加载jQuery之前加载了视图级脚本。

之所以发生这种情况,是因为您在布局中调用RenderBody ,这会将从视图呈现的标记呈现到调用它的位置(就在hr标记之前)。 但是,即使在渲染页脚之后,您也会在以后加载jQuery。 因此,当razor从您的视图中呈现js代码时,那时,jQuery尚不可用于DOM。

为了确保在加载jQuery之后执行视图级代码,您应该使用Sections来呈现页面级脚本

因此,在您的布局中,包含所需的文件, 然后调用RenderSection方法来执行页面级脚本

   @RenderSection("scripts", required: false) 

在您的视图中,将所有页面级脚本保留在该部分内

 @section scripts {  } 

现在当剃刀渲染布局时,它将从您的页面/视图执行脚本,其中为scripts调用RenderSection 。 显然我们之前加载了jQuery。 所以一切都会奏效。