基本 jQuery 脚本在 NavBar 部分视图中不起作用

Posted

技术标签:

【中文标题】基本 jQuery 脚本在 NavBar 部分视图中不起作用【英文标题】:Basic jQuery scripts aren't working in NavBar partial View 【发布时间】:2018-07-15 09:26:43 【问题描述】:

在我的_Layout 页面中,我将导航栏拆分为它自己的局部视图,然后在_Layout 页面中调用该局部视图。

这是我的_Layout

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>@ViewBag.Title - My Application</title>
    @Styles.Render("~/Content/styles")
    @Scripts.Render("~/bundles/modernizr")
    @Scripts.Render("~/bundles/lib")
</head>
<body>
    @Html.Partial("_Navbar")
    <div class="container body-content">
        @RenderBody()
        <hr />
        <footer>
            <p>&copy; @DateTime.Now.Year - My Application</p>
        </footer>
    </div>

    @Scripts.Render("~/bundles/datatables")
    @RenderSection("scripts", required: false)
</body>
</html>

现在在我的_Navbar:

@using System.Globalization
@using System.Threading

@
    var user = @User.Identity.Name.Split('\\')[1].Replace('.', ' ');
    CultureInfo cultureInfo = Thread.CurrentThread.CurrentCulture;
    TextInfo textInfo = cultureInfo.TextInfo;
    var userNameCapital = textInfo.ToTitleCase(user);


<nav class="navbar navbar-expand-lg navbar-dark bg-dark fixed-top">
    <div class="container">
        @Html.ActionLink("My Application", "Index", "Home", new  area = "" , new  @class = "navbar-brand" )
        <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarColor02" aria-controls="navbarColor02" aria-expanded="false" aria-label="Toggle navigation" style="">
            <span class="navbar-toggler-icon"></span>
        </button>

        <div class="collapse navbar-collapse" id="navbarColor02">
            <ul class="navbar-nav mr-auto">
                <li class="nav-item active">
                    <a class="nav-link" href="#">Link 1 <span class="sr-only">(current)</span></a>
                </li>
                <li class="nav-item">
                    <a class="nav-link" href="#">Link 2</a>
                </li>
            </ul>
            <form class="form-inline mr-auto">
                <input id="Nav-Input-Txt" class="form-control mr-sm-2" type="text" placeholder="Search">
                <input id="NavBar-Search-Btn" class="btn btn-secondary my-2 my-sm-0" type="submit" value="Search" />
            </form>
            <p class="nav navbar-text navbar-right">@userNameCapital</p>
        </div>
    </div>
</nav>

@section scripts
    <script>
        $(document).ready(function () 

            console.log("test");

            $("#NavBar-Search-Btn").on("click",
                function () 
                    console.log("TEST");
                );
        );
    </script>

当我点击按钮时,我没有收到我的console.log("TEST");.. 而是我的页面只是刷新。如何让 jQuery 处理我的 _Navbar 部分视图?

更新

@Scripts.Render("~/bundles/lib") 是我的 jQuery 版本所在的位置。

bundles.Add(new ScriptBundle("~/bundles/lib").Include(
            "~/Scripts/jquery-version.js",
            "~/Scripts/bootstrap.js",
            "~/Scripts/bootbox.js",
            "~/Scripts/respond.js",
            "~/Scripts/moment.js",
            "~/Scripts/jquery.datetimepicker.js",
            "~/Scripts/jquery-ui.js",
            "~/Scripts/toastr.js",
            "~/Scripts/select2.full.js",
            "~/Scripts/jquery.mask.min.js",
            "~/Scripts/SiteScript.js"));

UPDATE 2 将脚本放入 _Layout

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>@ViewBag.Title - My Application</title>
    @Styles.Render("~/Content/styles")
    @Scripts.Render("~/bundles/modernizr")
    @Scripts.Render("~/bundles/lib")
</head>
<body>
@Html.Partial("_Navbar")
<div class="container body-content">
    @RenderBody()
    <hr />
    <footer>
        <p>&copy; @DateTime.Now.Year - My Application</p>
    </footer>
</div>

@Scripts.Render("~/bundles/datatables")
@RenderSection("scripts", required: false)

    @section scripts
        <script>
        $(document).ready(function () 

            console.log("test");

            $("#NavBar-Search-Btn").on("click",
                function () 
                    console.log("TEST");
                );
        );
        </script>
    
</body>
</html>

【问题讨论】:

【参考方案1】:

@section 脚本应位于父级 _Layout 视图中,而不是 _Navbar 部分视图中。

【讨论】:

我仍然收到相同的结果。单击按钮时,我的控制台中没有收到任何内容。我将用我编辑的内容更新问题以适合您的答案。【参考方案2】:

这是 ASP.NET 网页吗?

我不知道,如果我遗漏了什么,但您在表单中有一个提交按钮,它将提交表单并刷新页面。您可以尝试将类型更改为按钮而不是提交。

【讨论】:

【参考方案3】:

我自己通过将 jQuery 添加到 .js 文件中并在 _Layout 中调用该文件来解决此问题。

【讨论】:

以上是关于基本 jQuery 脚本在 NavBar 部分视图中不起作用的主要内容,如果未能解决你的问题,请参考以下文章

JQuery 位置:通过滚动页面修复“导航栏”

Bootstrap Navbar 汉堡包在单击时不会折叠

iOS 7,表头视图不浮动

text jquery navbar

在使用 rails 的动态加载视图中使用 Jquery 插件

视图组件中的 Javascript