Можно ли внедрить элемент управления в тело страницы из кода?

У меня есть модуль dnn, и мне нужно добавить некоторые элементы HTML в тег body страницы.

Я попытался:

HtmlGenericControl divControl = new HtmlGenericControl("DIV");
divControl.ID = "divControl";
this.Page.Controls.AddAt(0, divControl);

приведенный выше код заставляет HTML выглядеть так:

<div id="xxxxxx_divControl"></div><!DOCTYPE html>
<html  lang="en-US">
<head id="Head">...

На странице нет свойства body, так есть ли способ сделать отображение div в теге body? (как показано ниже)

<!DOCTYPE html>
<html  lang="en-US">
<head id="Head">...
</head>
<body>
<div id="xxxxxx_divControl"></div>
....
</body>
</html>

person malkassem    schedule 15.01.2014    source источник


Ответы (2)


Вы можете добавить runat="server" и идентификатор к тегу body. Затем добавьте свой элемент управления в коллекцию элементов управления тела. Но, в зависимости от вашего жизненного цикла страницы, она может оказаться не там, где вы хотите, поэтому предпочтительным способом по-прежнему является заполнитель.

person Alexander    schedule 15.01.2014

Вы хотите добавить его не к элементам управления Page, а к элементам управления контейнера на странице. Используйте для этого PlaceHolder. Просто добавьте элемент управления PlaceHolder на свою страницу, куда вы хотите добавить контент:

<asp:PlaceHolder runat="server" ID="somePlaceHolder" />

Затем вы бы ссылались на это в своем коде:

HtmlGenericControl divControl = new HtmlGenericControl("DIV");
divControl.ID = "divControl";
this.somePlaceHolder.Controls.AddAt(0, divControl);
person David    schedule 15.01.2014
comment
Это отличное решение, но, к сожалению, не совсем то, что я ищу. Мне нужно сделать это, добавив любые элементы управления PlaceHolder. Есть несколько модулей, которые используют код этого модуля, поэтому я действительно не могу добиться того, чего хочу, используя этот метод. - person malkassem; 15.01.2014
comment
@malkassem: Другой вариант — превратить какой-либо другой элемент страницы в элемент управления на стороне сервера и использовать его вместо этого. Дело в том, что вы должны иметь возможность идентифицировать и ссылаться на местоположение на странице с помощью серверного кода, что означает, что местоположение должно быть элементом на стороне сервера. . Если вам нужно использовать элементы на стороне клиента, вам, вероятно, потребуется сослаться на них с помощью JavaScript и либо сохранить содержимое в переменной JavaScript, либо сделать вызов AJAX, чтобы получить его и добавить в указанное место с кодом на стороне клиента. - person David; 15.01.2014
comment
Еще одна отличная идея, но значит ли это, что нельзя просто как-то сослаться на элемент body? Интересно, почему есть четкий доступ к головному элементу, а не к телу? - person malkassem; 15.01.2014
comment
@malkassem: Где вы видите доступ к элементу head? Если вы сделали эту работу, опубликуйте код и, возможно, есть способ изменить его, чтобы использовать вместо него элемент body. Вы также можете попробовать проверить текущее содержимое коллекции Controls, к которой вы добавляете, и посмотреть, различает ли она разные элементы на стороне клиента. Если это так, вы можете написать некоторую логику, чтобы определить, где разместить ваш контент. Хотя это немного хак. - person David; 15.01.2014
comment
в объекте страницы есть свойство Header. Если вы добавите элемент управления в коллекцию элементов управления этого объекта, он отобразится в элементе head. - person malkassem; 15.01.2014