java script не добавляется, если я пишу тег скрипта в разделе

Я пишу приложение MVC4, в котором я загружаю сценарий в частичном представлении, как это частичное представление конкретного сценария. Если я пишу скрипт тега в @section scriptsто не добавляется на странице, но если я удаляю @section Scriptsто он работает хорошо ниже код в частичном представлении

@section scripts
{    
    <script>
        jQuery.cachedScript('@Url.StaticContent("myscript.js", false)');
    </script>       
}

выше код не работает, где, как будто я пишу его, как ниже сценария

<script>
    jQuery.cachedScript('@Url.StaticContent("myscript.js", false)');
</script>

почему он не принимает ссылку?

1 ответ

  1. AFAIK, @section Scriptsне работает для частичных представлений. Помимо стандартного <script>подхода к тегам существует два способа обхода:

    1. Переместите страницу @section Scriptsвида, содержащую частичное представление, и поместите @RenderSectionее на страницу макета, например:

    _Макет.cshtml

    @RenderSection("Scripts", required: false)
    

    Вид.cshtml

    @section Scripts
    {
        <script>
            jQuery.cachedScript('@Url.StaticContent("myscript.js", false)');
        </script>
    }
    
    1. Используйте пользовательское расширение HTML helper для частичного представления с этим кодом (кредиты Erik Philips о том, как отобразить раздел в частичном представлении в MVC3?, использование TagBuilderвместо String.Formatотрисовки тегов):

      public static class RenderJavaScript
      {
          private const String jsViewData = "RenderJS";
      
          public static void IncludeJS(this HtmlHelper helper, String content)
          {
              List<String> contentList = helper.ViewContext.HttpContext.Items[RenderJavaScript.jsViewData] as List<String>();
              if (contentList != null && contentList.Count > 0)
              {
                  if (!contentList.Contains(url))
                  {
                      contentList.Add(url);
                  }
              }
              else
              {
                  contentList = new List<String>();
                  contentList.Add(url);
                  helper.ViewContext.HttpContext.Items.Add(RenderJavaScript.jsViewData, contentList);
              }
          }
      
          public static MvcHtmlString RenderJS(this HtmlHelper helper)
          {
              var result = new StringBuilder();
      
              List<String> scriptList = helper.ViewContext.HttpContext.Items[RenderJavaScript.jsViewData] as List<String>();
              if (scriptList != null && scriptList.Count > 0)
              {
                  foreach (String script in scriptList)
                  {
                      // start <script> tag
                      TagBuilder startScript = new TagBuilder("script");
                      startScript.MergeAttribute("type", "text/javascript"); // optional
                      startScript.MergeAttribute("src", script); // required src attribute
                      result.AppendLine(startScript.ToString(TagRenderMode.StartTag));
      
                      // end </script> tag
                      TagBuilder endScript = new TagBuilder("script");
                      result.Append(endScript.ToString(TagRenderMode.EndTag));
                  }
              }
      
              return MvcHtmlString.Create(result.ToString());
          }
      
          // rendering inner text instead of using src attribute
          public static MvcHtmlString CustomJS(this HtmlHelper helper)
          {
              var result = new StringBuilder();
      
              List<String> contentList = helper.ViewContext.HttpContext.Items[RenderJavaScript.jsViewData] as List<String>();
              if (contentList != null && contentList.Count > 0)
              {
                  foreach (String text in contentList)
                  {
                      // start <script> tag
                      TagBuilder startScript = new TagBuilder("script");
                      startScript.MergeAttribute("type", "text/javascript"); // optional
                      startScript.SetInnerText(text);
                      result.AppendLine(startScript.ToString(TagRenderMode.StartTag));
      
                      // end </script> tag
                      TagBuilder endScript = new TagBuilder("script");
                      result.Append(endScript.ToString(TagRenderMode.EndTag));
                  }
              }
      
              return MvcHtmlString.Create(result.ToString());
          }
      }
      

    Чтобы добавить скрипты в представления или частичные представления, добавьте IncludeJSметод с содержимым скрипта:

    @{
        Html.IncludeJS(jQuery.cachedScript('@Url.StaticContent("myscript.js", false)'););
    }
    

    или использование пути скрипта:

    @{
        Html.IncludeJS(@Url.StaticContent("myscript.js", false));
    }
    

    Затем добавьте либо RenderJSили ‘CustomJS’ метод на странице макета:

    @Html.RenderJS()
    @Html.CustomJS()
    

    Смежные вопросы:

    Как добавить скрипт в частичное представление в MVC4?

    ASP MVC определяет раздел в частичном представлении