Подтвердить что ты не робот

ASP.NET динамически вставляет код в голову

Я работаю внутри Web User Control (.ascx), который будет включен в обычную веб-форму (.aspx), но мне нужно иметь возможность динамически вставлять код в начало документа из пользовательский контроль. В мои дни Coldfusion <cfhtmlhead> сделал бы трюк. Есть ли эквивалент этого в ASP.NET или подобный взлом?

4b9b3361

Ответ 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 внутри тега заголовка.