¿Cómo crear saltos de línea entre etiquetas generadas dinámicamente en un marcador de posición?
-
06-07-2019 - |
Pregunta
Este es el código a continuación en el código detrás del evento Page_Load
del archivo:
LinkButton linkButton = new LinkButton();
linkButton.ID = "LinkButtonDynamicInPlaceHolder1Id" + i;
linkButton.ForeColor = Color.Blue;
linkButton.Font.Bold = true;
linkButton.Font.Size = 14;
linkButton.Font.Underline = false;
linkButton.Text = itemList[i].ItemTitle.InnerText;
linkButton.Click += new EventHandler(LinkButton_Click);
linkButton.Attributes.Add("LinkUrl",itemList[i].ItemLink.InnerText);
PlaceHolder1.Controls.Add(linkButton);
Label label = new Label();
label.ID = "LabelDynamicInPlaceHolder1Id" + i;
label.ForeColor = Color.DarkGray;
label.Text = itemList[i].ItemDescription.InnerText;
PlaceHolder1.Controls.Add(label);
Quiero un salto de línea entre cada control generado.
Solución
La solución a su problema de Salto de línea se encuentra a continuación, sin embargo, si está haciendo esto en el evento Page_Load, entonces sus controladores de eventos no funcionarán y tendrá problemas con el Ciclo de vida de la página. Básicamente, para que sus controladores de eventos se activen en PostBack, realmente necesita crear estos controles dinámicos antes en el Ciclo de vida de la página. Intente mover su código al método OnInit si se encuentra con este problema.
LinkButton linkButton = new LinkButton();
linkButton.ID = "LinkButtonDynamicInPlaceHolder1Id" + i;
linkButton.ForeColor = Color.Blue;
linkButton.Font.Bold = true;
linkButton.Font.Size = 14;
linkButton.Font.Underline = false;
linkButton.Text = itemList[i].ItemTitle.InnerText;
linkButton.Click += new EventHandler(LinkButton_Click);
linkButton.Attributes.Add("LinkUrl",itemList[i].ItemLink.InnerText);
PlaceHolder1.Controls.Add(linkButton);
//Add This
PlaceHolder1.Controls.Add(new LiteralControl("<br />"));
Label label = new Label();
label.ID = "LabelDynamicInPlaceHolder1Id" + i;
label.ForeColor = Color.DarkGray;
label.Text = itemList[i].ItemDescription.InnerText;
PlaceHolder1.Controls.Add(label);
Otros consejos
Otra solución es que podría agregar cada control a un Panel, lo que los representará en un <div>
dando como resultado el efecto que está buscando.
Para mí, esto sería más dinámico porque si ocultas cualquiera de los controles, el div colapsará y no dejará líneas vacías.
LinkButton linkButton = new LinkButton();
linkButton.ID = "LinkButtonDynamicInPlaceHolder1Id" + i;
linkButton.ForeColor = Color.Blue;
linkButton.Font.Bold = true;
linkButton.Font.Size = 14;
linkButton.Font.Underline = false;
linkButton.Text = itemList[i].ItemTitle.InnerText;
linkButton.Click += new EventHandler(LinkButton_Click);
linkButton.Attributes.Add("LinkUrl",itemList[i].ItemLink.InnerText);
//Add control to a panel, add panel to placeholder
Panel lbPan = new Panel();
lbPan.Controls.Add(linkButton);
PlaceHolder1.Controls.Add(lbPan);
Label label = new Label();
label.ID = "LabelDynamicInPlaceHolder1Id" + i;
label.ForeColor = Color.DarkGray;
label.Text = itemList[i].ItemDescription.InnerText;
//Add control to a panel, add panel to placeholder
Panel lblPan = new Panel();
lblPan.Controls.Add(label);
PlaceHolder1.Controls.Add(lblPan);
Cómo: Agregar controles a una página web ASP.NET mediante programación
En algunos casos, es posible que desee crear tanto texto estático como controles. Para crear texto estático, puede usar un servidor web Literal o Label control . Luego puede agregar estos controles al contenedor como lo haría cualquier otro control Para información sobre el estado de vista en los controles creados en tiempo de ejecución, consulte Servidor web dinámico Controles y estado de la vista.