Я работаю внутри Web User Control (.ascx), который будет включен в обычную веб-форму (.aspx), но мне нужно иметь возможность динамически вставлять код в начало документа из пользовательский контроль. В мои дни Coldfusion <cfhtmlhead> сделал бы трюк. Есть ли эквивалент этого в ASP.NET или подобный взлом?
ASP.NET динамически вставляет код в голову
Ответ 1
Чтобы добавить разметку HTML, вы можете сделать следующее:
В вашем коде UserControl вы можете получить доступ к Page.Header, который сам по себе является элементом управления. К этому элементу управления вы можете добавить новые элементы управления:
HtmlGenericControl newControl = new HtmlGenericControl("someTag");
newControl.Attributes["someAttr"] = "some value";
Page.Header.Controls.Add(newControl);
Чтобы добавить разметку script, вам не нужен доступ к тегу head вообще, поскольку ASP.NET имеет вспомогательные методы на ClientScriptManager, которые делают для вас работу:
Вот примеры кода, который вы также можете ввести в свой код управления пользователя:
// Register some inline script:
Page.ClientScript.RegisterClientScriptBlock(GetType(), "myAlertScript", "alert('hello!')", true);
// Register a script reference:
Page.ClientScript.RegisterClientScriptInclude(GetType(), "myLibraryScript", "~/Scripts/MyScriptLibrary.js");
Ответ 2
this.Page.Header.Controls.Add
Выполняя это, вы добавляете элементы управления в раздел главы. Вы можете добавить любой тип контроля. Если вы чувствуете, что вам нужно добавить простой текст (или вы хотите написать теги вручную), загляните в класс LiteralControl.
Ответ 3
Я понимаю, что это старый вопрос, но это еще один пример.
Попробуйте следующее:
Page.Header.Controls.Add(
new LiteralControl(
"<script>alert('Literal Added to <Head>.');</script>"
)
);
Если вы хотите добавить script в определенный индекс <head>
, вы можете использовать
AddAt(index, new LiteralControl(...))
где индекс 0 равен вершине <head>
Кроме того, вам нужно добавить runat="server"
в свой заголовок, например. <head id="head1" runat="server">
Ответ 4
Вот некоторые рекомендации по использованию кода С# для изменения заголовка страницы здесь. Он должен отлично работать с любым серверным кодом, который выполняется до завершения загрузки страницы.
Прост, например,
HtmlHead head = Page.Header;
HtmlTitle title = new HtmlTitle();
title.Text = "Test Page";
head.Controls.Add(title);
Ссылка HTMLHead находится в пространстве имен
System.Web.UI.HtmlControls
Переопределите настраиваемый метод Load() для добавления элементов управления или ссылок, которые вам нужны, в заголовок страницы, когда родительская страница .aspx загружается на сервер.
Ответ 5
У меня есть простое решение для этого. Создайте кэш памяти во время выполнения на основе URL-адреса страницы (в виде ключа), который содержит х-информацию о y (будь то ссылка на файл, текст script или класс, который генерирует JavaScript) и сериализует его данные в JSON. Newtonsoft полезен для экземпляров любого класса. Фактически, вы можете использовать его для инициализации любого нового экземпляра класса на основе данного ввода. В некотором смысле это означает, что вы можете автоматически создавать экземпляры какого-либо определенного класса, несмотря на то, что пользователь управляет экземпляром. В конце вы создаете простую веб-форму, которая будет служить ссылкой script и как конечная конечная точка. Он вытаскивает JavaScript (или что это он) и выплескивает код на стороне клиента, который вам нужен, в качестве ссылки script внутри тега заголовка.