vieja pregunta ... pero me acabo de encontrar con este tema y este era el puesto # 1 que mantuvo subiendo a Google, así que imagino que agregaría mi respuesta ya que los otros no funcionaron en mi caso.
Aquí es cómo lo hice cuando un habitual <asp:Content
no quiere trabajar (aunque en condiciones normales de uso, la @JayC respuesta es cómo lo hace):
MasterPage tiene esta ContentPlaceHolder
:
<asp:ContentPlaceHolder ID="ScriptsPlace" runat="server"></asp:ContentPlaceHolder>
Tuvo que agregar dinámicamente JavaScript desde un Control de usuario. Tratando de utilizar el ContentPlaceHolder
da directamente este error:
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.
así que quería añadir el script desde el código subyacente.Aquí es la carga de la página para el archivo .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);
}
}
ACTUALIZACIÓN: Así que resulta que tenía que usar esto en más lugares de lo que esperaba, y terminó usando una forma que era mucho más flexible/legibles . En el control del usuario en sí, simplemente envolví el javascript y cualquier otra cosa que necesitara moverse con un div
normal.
<div id="_jsDiv" runat="server">
$(document).ready(function() {
//js stuff
});
Other server controls or HTML junk
</div>
Y a continuación, el código detrás se encuentra que div y, a continuación, pasar a la 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);
}
}
en realidad poner este código en un control de usuario personalizado, y sólo tengo mis controles de usuario normales heredan desde el control de usuario personalizado, por lo que una vez que envuelva el javascript/etc con un <div id="_jsDiv" runat="server">
, el control de usuario personalizada toma cuidar del resto y no tengo que hacer nada en el código detrás del control del usuario.
Disculpe, eso no soluciona realmente mi problema. Necesito un código para poner programáticamente, digamos, algo de texto, en esa área de contenido, porque no puedo acceder a él desde el código detrás de la página web. Tengo la página default.aspx y ContentPlaceHolder con ID = content1. En default.aspx.cs no puedo "ver" contenido1. –
Ya veo. ¿Hay alguna razón por la que no puedas poner un marcador de posición en el área 'Contenido' de tu página? Ciertamente puede agregar cosas a eso: – JayC
Por ejemplo: 'Label lbl = new Label(); lbl.Text = "algo"; placeHolder.Controls.Add (lbl); ' – JayC