Теги script и теги ссылок входят в asp: content или за пределами

У меня есть страница с главной страницей. Я помещаю script и связываю теги внутри держателей содержимого asp: content или снаружи или имеет значение.

Когда я выхожу наружу, я получаю следующее предупреждение:

Элементы управления содержимым разрешены непосредственно на странице содержимого, содержащей элементы управления содержимым.

Ответ 1

Я вижу пять (или 8) способов сделать это:

  • В codebehind (.cs или .vb), используя:
    • Scriptmanager.RegisterClientScriptinclude - использование абсолютного/относительного пути
    • Scriptmanager.RegisterClientScriptInclude - использование встроенного ресурса
    • Scriptmanager.RegisterSlientScriptBlock - с вашим источником внутри
  • Добавление его в строку на странице ASPX в дизайнере
  • Вставьте его внутри содержимого asp: content, где содержимое находится внутри тега body.
  • Вставьте его внутри asp: content, где содержимое живет внутри головы (Вы сказали, что это не вариант, поэтому игнорируйте это).
  • Добавление его программным путем с помощью ScriptManager внутри элемента управления, который вы используете на странице, как указано выше.

"Только элементы управления содержимым разрешены непосредственно на странице содержимого, содержащей элементы управления содержимым" - вы забыли runat = "server"?

Ответ 2

Если это скрипты и ссылки для всех страниц, они должны выйти за пределы ContentPlaceHolders. Если это скрипты и ссылки для этой страницы, они должны войти внутрь Контента внутри головы. Если это скрипты по умолчанию, поместите его в заголовок ContentPlaceHolder, и при необходимости его можно заменить дочерней страницей. (VS обычно жалуется на ContentPlaceHolder в голове, но он отлично работает для меня).

// master Page
<head runat="server">
   <asp:ContentPlaceHolder id="head" runat="server">
      <!-- Default scripts and CSS -->
      <link rel="stylesheet" type="text/css" href="default.css" />
      <script type="text/javascript" src="jquery.js"></script>
   </asp:ContentPlaceHolder>
   <!-- Mandatory scripts and css -->
   <link rel="stylesheet" type="text/css" href="all.css" />
   <script type="text/javascript" src="all.js"></script>
</head>
<body>
   Master Page!
   <asp:ContentPlaceHolder id="body" runat="server" />
</body>

// Child (no JQuery)
<asp:Content ContentPlaceHolderID="head" runat="server">
   <link rel="stylesheet" type="text/css" href="default.css" />
   <!-- Don't need JQuery -->
   <script type="text/javascript" src="prototype.js"></script>
</asp:Content>
<asp:Content ContentPlaceHolderID="body" runat="server">
   Child Page!
</asp:Content>

// Child 2 (with JQuery)
<asp:Content ContentPlaceHolderID="body" runat="server">
   Child Page!
</asp:Content>

Ответ 3

Если вы ссылаетесь на теги <asp:Content />, вы не можете поместить что-либо вне их на страницу .aspx. Таким образом, вы ограничены тем, что помещаете их в тег <asp:Content />. Если вам нужны теги <script /> и <link />, вам нужно либо поместить a <asp:ContentPlaceHolder /> в <head> вашей главной страницы, либо добавить их динамически через коллекцию Page Controls.

Ответ 4

Вне. Внутри ContentPlaceholders все равно будет заменено содержимое со страниц, поэтому нет смысла что-то там помещать.

Ответ 5

снаружи. на главной странице

Держатели мест - это элементы управления обтеканием страниц, которые сходят с мастер-страниц.

Ответ 6

Используйте тег asp.net scriptreference на главной странице, чтобы добавить ссылку на файл javascript, и вы сможете получить доступ ко всему, что вам нужно в файле javascript, как если бы вы добавили его на локальную страницу.