如何插入jQuery代码?未捕获的ReferenceError:$未在视图razor代码中定义

ca9*_*3d9 13 asp.net asp.net-mvc jquery asp.net-mvc-4

我在文件的末尾有以下Asp.Net MVC 4剃刀代码.

....
@section Scripts {
    @Scripts.Render("~/bundles/jqueryval")
}

<script type="text/javascript">
    $('#Address_State').val('MA');
</script>
////// End of file
Run Code Online (Sandbox Code Playgroud)

但是,它生成了以下html代码.它在线上引起错误$('#Address_State').val('MA');.错误消息是Uncaught ReferenceError: $ is not defined.如何在剃刀文件中插入jQuery代码?

.....
<script type="text/javascript">
    $('#Address_State').val('MA'); // Uncaught ReferenceError: $ is not defined
</script>
            </section>
        </div>
        <footer>
            <div class="content-wrapper">
                <div class="float-left">
                    <p>&copy; 2013 - Paperspeed</p>
                </div>
            </div>
        </footer>

        <script src="/Scripts/jquery-1.9.1.js"></script>


    <script src="/Scripts/jquery.unobtrusive-ajax.js"></script>
<script src="/Scripts/jquery.validate.js"></script>
<script src="/Scripts/jquery.validate.unobtrusive.js"></script>


    </body>
</html>
Run Code Online (Sandbox Code Playgroud)

更新:

以下是_Layout.cshtml的最后四行.

        @Scripts.Render("~/bundles/jquery")
        @RenderSection("scripts", required: false)
    </body>
</html>
Run Code Online (Sandbox Code Playgroud)

gdp*_*gdp 24

在实际使用之前,您需要包含JQuery.

实现这一目标的常用方法是在主布局中包含头部需要的脚本.或者在可以有条件地包含脚本的位置放置一个可选部分(头部)

首先在每个页面上为您想要的jquery脚本创建一个必需的包:

public static void RegisterBundles(BundleCollection bundles)
{
    bundles.Add(new ScriptBundle("~/js/required").Include(
        "~/Scripts/jquery-2.0.2.js"));

    //other bundles
}
Run Code Online (Sandbox Code Playgroud)

然后创建一个网站模板:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="utf-8" />
    <title>Title</title>
    @Styles.Render("~/css/required")
    @RenderSection("head", false) //For css on a page by page basis
</head>
<body>
    @RenderBody()
    @Scripts.Render("~/js/required") //Here add your jquery include
    @RenderSection("scripts", false) //Here you add scripts at the bottom of the page
</body>
</html>
Run Code Online (Sandbox Code Playgroud)

然后使用此剃刀文件作为所有其他派生剃刀视图的基本布局,如下所示:

@{
    ViewBag.Layout = "~/Views/Shared/_MasterLayout.cshtml";
}

@section head {
     //Any css you want to add
}

<p>Some html content</p>

@section scripts {
    //scripts you want to include at the bottom on a page by page basis
}
Run Code Online (Sandbox Code Playgroud)


Jam*_*mes 14

将以下代码行移动到body标记内_Layout.cshtml视图的顶部.然后首先加载jQuery脚本.

<body>
    @Scripts.Render("~/bundles/jquery")
    @Scripts.Render("~/bundles/bootstrap")
    @RenderSection("scripts", required: false)
Run Code Online (Sandbox Code Playgroud)

  • 这是这个问题最准确的答案。 (2认同)

PSL*_*PSL 7

在jquery被加载之前调用你的脚本,因此它不知道$的含义.尝试在布局文件的head部分中加载jquery脚本.


小智 6

无需移动任何东西。就在视图中有脚本的地方,将脚本放入节脚本中,假设您在 _Layout 文件中声明了节脚本:

@section scripts{
    <script>
        $(document).ready(function () {
            alert('Hello');
        });
    </script>
}
Run Code Online (Sandbox Code Playgroud)

您可以对每个页面上带有附加 CSS 的部分执行相同的技术,声明部分 CSS 或 Head 或任何名称,然后在标记之前的视图顶部添加 @section name{ }