Теги 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, как если бы вы добавили его на локальную страницу.