【问题标题】:Adding a javascript to a razor page properly正确地将 javascript 添加到剃须刀页面
【发布时间】:2019-09-13 06:04:20
【问题描述】:

我有一个模板,我正在使用来自模板怪物的模板。在文件中有一个 javascript 页面,其中包含运行页面所需的所有脚本。我已将此添加到呈现脚本的页面底部。它似乎没有访问该文件。它在页面上,当我在“检查对象”下查看它时出现。当我将代码 sn-p 直接放在剃须刀页面中时,它可以工作。任何想法为什么它不会从 javascript 文件中提取它?谢谢你的帮助。 编辑 它位于 _Layout 页面中。菜单在哪里。

插入剃须刀页面时,以下内容有效。

<script type="text/javascript">
    $(document).ready(function () {

        $(".sticky-menu").sticky({ topSpacing: 0 });

    });

    $(window).on('load', function () {
        function fadeOut(el) {
            el.style.opacity = 0.4;
            var last;
            var tick = function () {
                el.style.opacity = +el.style.opacity - (new Date() - last) / 600;
                last = +new Date();
                if (+el.style.opacity > 0) {
                    (window.requestAnimationFrame && requestAnimationFrame(tick)) || setTimeout(tick, 100);
                } else {
                    el.style.display = "none";
                }
            };
            tick();
        }
        var pagePreloaderId = document.getElementById("page-preloader");
        setTimeout(function () {
            fadeOut(pagePreloaderId)
        }, 1000);
    });

</script>

这是我在剃须刀页面中无法使用的内容

 @Scripts.Render("~/Scripts/scripts.js")

顶部代码位于“scripts.js”文件中。

这个文件中有很多代码,似乎没有一个工作。这意味着它就像没有访问脚本。页面中加载的所有脚本与模板中的常规 HTML 的顺序相同。模板 HTML 文件有效。

更新 -

我通过将其移出脚本页面并移至布局页面来实现此功能。我仍然不确定为什么或是什么导致这个 sn-p 在脚本页面中不起作用。这似乎是唯一不起作用的部分。

在脚本文件中是这样写的:

(function($) {
'use strict';

jQuery(document).on('ready', function() {
  ////// Other snippets //////

      $(".sticky-menu").sticky({
        topSpacing: 0
       });
  ////// Other snippets //////

 });

在 _Layout 页面中是这样的:

 <script type="text/javascript">
        $(document).ready(function () {

            $(".sticky-menu").sticky({ topSpacing: 0 });

            var hub = $.connection.notificationHub;
            $.connection.hub.start()
                .done(function () {
                    console.log("Hub Connected!");

                })
                .fail(function () {
                    console.log("Could not Connect!");
                });
        });
 </script>

我仍然不知道为什么这在脚本文件中不起作用...

更新 - 2019 年 4 月 26 日

我发现了问题。模板是使用早期版本的 jQuery 创建的。我发现脚本文件在我删除时加载并部分工作

jQuery(document).on('ready', function () { 

整个文件是这样的

(function($) {
'use strict';

    jQuery(document).on('ready', function () { 

    ---> All the jQuery Code

    });

 })(jQuery);

我将上面的行改为:

 }(jQuery));

我看到了一些其他的实现方式。

但是,使用 jQuery 3.3.1 有一些不对劲的地方。如果有人知道如何正确格式化它,那么它会很有帮助。

【问题讨论】:

  • 在 Visual Studio 中,您可以将脚本文件拖放到编辑器中的页面上,它会自动为您创建标记。
  • 是的,但那是针对页面本身的。不一定适用于 _Layout 页面。我在哪里使用@Scripts.Render("")
  • 它的工作原理与 .cshtml 页面相同。
  • 如果您在所有页面上都使用相同的脚本,那么添加一个

标签: javascript model-view-controller razor-pages


【解决方案1】:

你改变了

@Scripts.Render("~/Scripts/scripts.js")

<script src="~/Scripts/scripts.js"></script>

会有用的

您可以参考此链接了解Script.Render 与脚本标签之间的区别

What is the difference between "@Script.Render" and "<script>"?

更新:

如果你有这样的 _Layout.cshtml 视图

<html>
    <body>
        @RenderBody()
        @RenderSection("scripts", required: false)
    </body>
</html>

那么你就可以有一个这样的 index.cshtml 内容视图

@section scripts {
     <script type="text/javascript" src="~/Scripts/scripts.js"></script>
}

【讨论】:

  • 我试过了,但是我没有对页面上加载的所有 16 个脚本都这样做。为什么正常的 Razor 方法不起作用?
  • 你可以在布局中使用节脚本
  • 这实际上是在_Layout页面中。布局页面有一个菜单,当你滚动时它应该贴在顶部。这就是代码应该做的事情。
  • 你试过ctrl+f5清理缓存了吗?
  • 我已经清理了缓存,清理了解决方案,并重建了解决方案。仍然不起作用。会不会是我使用的 jQuery 版本比模板附带的版本更新?
猜你喜欢
  • 2020-11-02
  • 2021-09-01
  • 2013-09-12
  • 1970-01-01
  • 2021-12-20
  • 1970-01-01
  • 1970-01-01
  • 2020-03-27
  • 2022-10-07
相关资源
最近更新 更多