【问题标题】:ASP.NET MVC: JavaScript not affecting HTML in Master page if its order in the page comes after @RenderBodyASP.NET MVC:如果页面中的顺序在 @RenderBody 之后,则 JavaScript 不会影响母版页中的 HTML
【发布时间】:2014-07-25 21:55:12
【问题描述】:

在 ASP.NET MVC 中,@RenderBody() 之后包含的 JavaScript 似乎不会影响 @RenderBody() 内容。必须放在前面。即

母版页:

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <meta name="viewport" content="width=device-width" />
    <title>@ViewBag.Title</title>

</head>
<body>

    @RenderBody()
    <script src="http://code.jquery.com/jquery-latest.min.js" type="text/javascript"></script>

</body>
</html>

派生页面:

@{
    ViewBag.Title = "Settings";
    Layout = "~/Views/Shared/Master.cshtml";
}

<div id="status">Status</div>

<script>
    $("#status").hide().fadeIn();
</script>

对于派生页面,在调用 hide().fadeIn() 时,它还没有加载 jQuery,因此浏览器日志显示 JavaScript 错误。

但是,如果我将 jQuery 包含 &lt;script&gt; 标记放在 @RenderBody() 之前,则 jQuery 会正常加载。

我想知道为什么它必须在之前才能工作?我想把它放在后面,因为最好将脚本标签放在 HTML 文件的底部以获得更好的性能。

【问题讨论】:

  • 在您尝试使用它之后,您将包含 jquery。完全有道理,您的视图中的脚本将不起作用。

标签: jquery asp.net-mvc master-pages


【解决方案1】:

所有内容在呈现的 HTML 中从上到下运行。它不像编译语言那样预先编译。

所以要使用jQuery,你必须首先拥有jQuery 源脚本标签。这就是为什么它被普遍接受,但在头部而不是正文中为库编写脚本标签。然后,您可以在正文的任何​​位置使用 jQuery(或您正在使用的任何库)。

【讨论】:

  • 当你的整个页面依赖于 jQuery 时,确保它加载在顶部可能是可以的,正如你所说的库!
  • 不,通常不接受将脚本标签放在头部。请看stackoverflow.com/questions/14784616/…
  • @MikeSmithDev 好吧,每个人都说要这样做,但大多数人实际上并没有这样做 - 如果您查看 StackOverflow 本身的来源,以及您在答案中引用的 Yahoo 页面,说把脚本放在底部的那个,你会在顶部看到一些脚本。这就是我说“普遍接受”的原因——无论这是否是最好的想法,人们一直都在这样做,它确实让生活变得更轻松。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-14
  • 1970-01-01
相关资源
最近更新 更多