为什么我的视图不从_Layout.cshtml加载jquery代码,但是当我将它添加到视图中时呢?
为什么我的视图不加载从Layout.cshtmlinheritance的Jquery?
当我在视图中将本地链接放到jquery时,它可以工作,但不是。
_Layout.cshtml:
@ViewBag.Title - My ASP.NET Application @RenderBody()
视图:
@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。 所以一切都会奏效。