@section脚本与ASP.Net WebForm中使用的常用脚本标记之间的区别

时间:2014-08-30 00:58:45

标签: javascript asp.net-mvc-4

以下2个Javascripts有什么区别?我可以在Razor引擎MVC页面中使用第二种形式的Javascript而没有任何问题,那么使用第一种形式有什么好处呢?

MVC风格

@section Scripts {
    function check()
   {
      //do some validation logic here
   }
}

WebForms风格

<script type="text/javascript">
       function check()
       {
          //do some validation logic here
       }
</script>

3 个答案:

答案 0 :(得分:1)

@section Scripts本身不会在页面中产生任何输出,您需要在某处呈现该部分。当你使用它时,在某个地方有一个RenderSection调用,如下所示:

<script type="text/javascript">
@RenderSection('Scripts')
</script>

该部分名为Scripts的事实没有任何相关性,它只是一个用于包含脚本的部分的约定。

答案 1 :(得分:1)

@section Scripts {就像你的脚本占位符一样。在您的布局页面中,您将包含以下内容

<!DOCTYPE html>
<html>
<head>
  ....
</head>
<body>
  // common html for all pages based on this layout
  @RenderSection("scripts", required: false)
</body>

这就是说,如果页面包含Scripts部分,则在此处进行渲染。因此,使用此布局的页面可能具有以下内容

@section scripts {
  @Scripts.Render("~/bundles/jqueryval")
  <script src="../../Scripts/YourScript.js" type="text/javascript"></script>
  <script type="text/javascript">
    $('#SomeElement').click(function() {
      // do something
    });
  </script>
}

@RenderSection("scripts", required: false)将替换为@section scripts {

中的内容

答案 2 :(得分:1)

这可能有效,但出于某种原因不太理想:

@section Scripts {
    function check()
   {
      //do some validation logic here
   }
}

会导致你失去智力感。它可能会起作用,但会使生活变得更加困难。通常最好包含脚本标记:

@section Scripts {
    <script type="text/javascript">
    function check()
   {
      //do some validation logic here
   }
   </script>
}

此外,@ section脚本还会在母版页中定义@RenderSection(“Scripts”)。没有它,它会完全呈现您拥有的脚本标记(在WebForms示例中)。