Старый вопрос ... но я столкнулся с этим вопросом, и это было # 1 пост, который хранится в Google, поэтому я добавлю свой ответ, поскольку другие не работали в моем случае.
Вот как я это сделал, когда обычный <asp:Content
не будет работать (хотя при нормальном использовании, ответ @JayC как вы это делаете):
MasterPage имеет этот ContentPlaceHolder
:
<asp:ContentPlaceHolder ID="ScriptsPlace" runat="server"></asp:ContentPlaceHolder>
Пришлось динамически добавлять JavaScript из пользовательского элемента управления. Попытка использовать ContentPlaceHolder
непосредственно дает эту ошибку:
Parser Error Message: Content controls have to be top-level controls in a content page or a nested master page that references a master page.
Так что я хотел бы добавить скрипт из отделенного кода.Вот загрузки страницы для файла .ascx
:
protected void Page_Load(object sender, EventArgs e)
{
ContentPlaceHolder c = Page.Master.FindControl("ScriptsPlace") as ContentPlaceHolder;
if (c != null)
{
LiteralControl l = new LiteralControl();
l.Text="<script type=\"text/javascript\">$(document).ready(function() {js stuff;});</script>";
c.Controls.Add(l);
}
}
UPDATE: Так получается, что я должен был использовать это в большем количестве мест, чем я ожидал, и в конечном итоге, используя способ, который был гораздо более гибким/читаемым , В самом пользовательском элементе я просто завернул javascript и все остальное, что нужно было перемещать с помощью обычного div
.
<div id="_jsDiv" runat="server">
$(document).ready(function() {
//js stuff
});
Other server controls or HTML junk
</div>
И тогда код позади обнаружит, что DIV, а затем переместить его в ContentPlaceHolder
.
protected void Page_Load(object sender, EventArgs e)
{
ContentPlaceHolder c = Page.Master.FindControl("ScriptsPlace") as ContentPlaceHolder;
HtmlGenericCOntrol jsDiv = this.FindControl("_jsDiv") as HtmlGenericControl;
if (c != null && jsDiv != null)
{
c.Controls.Add(jsDiv);
}
}
Я на самом деле поместить этот код в элементе управления пользовательского пользователя, и я просто мои обычные пользовательские элементы управления наследуют от пользовательского элемента управления пользователя, поэтому, когда я обернуть JavaScript/и т.д. с <div id="_jsDiv" runat="server">
, контроль пользовательских пользователь принимает забота об остальном, и мне не нужно ничего делать в коде управления пользовательского элемента управления.
Извините, это на самом деле не решает мою проблему. Мне нужен код для программного ввода, скажем, некоторого текста, в эту область содержимого, потому что я не могу получить к нему доступ с CodeBehind на веб-странице. У меня есть страница default.aspx и ContentPlaceHolder с ID = content1. В default.aspx.cs я не могу «видеть» content1. –
Я вижу. Есть ли причина, по которой вы не можете поместить местозаполнитель в область «Содержимое» вашей страницы? Вы, безусловно, можете добавить к этому вещи: – JayC
Например: 'Label lbl = new Label(); lbl.Text = "что-то"; placeHolder.Controls.Add (lbl); ' – JayC