Javascript @section脚本与ASP.NETWebForm中使用的常用脚本标记之间的差异

Javascript @section脚本与ASP.NETWebForm中使用的常用脚本标记之间的差异,javascript,asp.net-mvc-4,Javascript,Asp.net Mvc 4,以下两个Java脚本之间有什么区别?我可以在Razor引擎MVC页面中使用第二种形式的Javascript而不会出现任何问题,那么使用第一种形式的好处是什么呢 MVC风格 @section Scripts { function check() { //do some validation logic here } } <script type="text/javascript"> function check() {

以下两个Java脚本之间有什么区别?我可以在Razor引擎MVC页面中使用第二种形式的Javascript而不会出现任何问题,那么使用第一种形式的好处是什么呢

MVC风格

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

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

函数检查()
{
//在这里执行一些验证逻辑
}

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

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

@RenderSection('脚本')

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

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

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

@RenderSection('脚本')

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

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

<!DOCTYPE html>
<html>
<head>
  ....
</head>
<body>
  // common html for all pages based on this layout
  @RenderSection("scripts", required: false)
</body>
@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”,必填项:false)
将替换为
@部分脚本中的内容{

@部分脚本{
就像是脚本的占位符。在布局页面中,您将包括以下内容

<!DOCTYPE html>
<html>
<head>
  ....
</head>
<body>
  // common html for all pages based on this layout
  @RenderSection("scripts", required: false)
</body>
@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)
将被
@部分scripts{

中的内容替换。这可能会起作用,但由于一个原因并不理想:

@section Scripts {
    function check()
   {
      //do some validation logic here
   }
}
将导致您失去智能感知。它可能会起作用,但会使生活更加困难。通常最好包含脚本标记:

@section Scripts {
    <script type="text/javascript">
    function check()
   {
      //do some validation logic here
   }
   </script>
}
@节脚本{
函数检查()
{
//在这里执行一些验证逻辑
}
}

此外,@section scripts在母版页中定义了@RenderSection(“scripts”)的位置进行渲染。如果没有它,它会精确地渲染您的脚本标记(在您的WebForms示例中)。

这可能会起作用,但由于一个原因并不理想:

@section Scripts {
    function check()
   {
      //do some validation logic here
   }
}
将导致您失去智能感知。它可能会起作用,但会使生活更加困难。通常最好包含脚本标记:

@section Scripts {
    <script type="text/javascript">
    function check()
   {
      //do some validation logic here
   }
   </script>
}
@节脚本{
函数检查()
{
//在这里执行一些验证逻辑
}
}

此外,@section scripts在母版页中定义了@RenderSection(“scripts”)的位置进行渲染。如果没有它,它将精确地渲染您拥有的脚本标记的位置(在WebForms示例中).

因此,如果我使用第二种形式,则脚本将在母版页中精确定义的位置呈现。如果是,则最好不要在母版页中包含某些脚本,尤其是当ajax请求特定MVC视图时。因此,如果我使用第二种形式,则脚本将在母版页中精确定义的位置呈现。如果是是的,那么最好不要在母版页中包含一些脚本,特别是如果它们是对特定MVC视图的ajax请求如果我不关心将脚本放在定义RenderSection的位置,那么第二个代码段应该可以。@Sunil:如果您愿意,您可以很好地使用常规脚本标记。没有任何内容表明您只需要使用节就可以了。为什么我不能简单地使用Webforms中的常规脚本标记(我问题中的第二个代码段)如果我不关心将脚本放在定义RenderSection的位置,那么第二个代码段应该可以。@Sunil:如果您愿意,您可以很好地使用正则脚本标记。没有任何规定您需要使用节,因为它们存在。