c# - tutorial - Agregando StyleSheets mediante programación en Asp.Net
utilización de estilos en asp net css (4)
Bueno, aquí está la solución que estoy usando actualmente:
He creado una clase de ayuda:
using System.Web.UI;
using System.Web.UI.WebControls;
namespace BusinessLogic.Helper
{
public class CssAdder
{
public static void AddCss(string path, Page page)
{
Literal cssFile = new Literal() { Text = @"<link href=""" + page.ResolveUrl(path) + @""" type=""text/css"" rel=""stylesheet"" />" };
page.Header.Controls.Add(cssFile);
}
}
}
Y luego, a través de esta clase de ayuda, todo lo que tengo que hacer es:
CssAdder.AddCss("~/Resources/Styles/MainMaster/MainDesign.css", this.Page);
CssAdder.AddCss("~/Resources/Styles/MainMaster/MainLayout.css", this.Page);
CssAdder.AddCss("~/Resources/Styles/Controls/RightMainMenu.css", this.Page);
//...
Así que puedo agregar todo lo que quiera con una línea de código simple.
También funciona con Masterpage y relaciones de página de contenido.
Espero eso ayude.
PD: No sé la diferencia de rendimiento entre esta y otras soluciones, pero parece más elegante y fácil de consumir.
Quiero agregar StyleSheets mediante programación en la sección de encabezado, pero uno de los ejemplos que vi parecía necesitar muchas líneas de código para agregar una sola hoja de estilo, aunque podría necesitar mucho:
Código de ejemplo:
HtmlLink css = new HtmlLink();
css.Href = "css/fancyforms.css";
css.Attributes["rel"] = "stylesheet";
css.Attributes["type"] = "text/css";
css.Attributes["media"] = "all";
Page.Header.Controls.Add(css);
También uso el método Page.Header.RenderControl()
pero tampoco funcionó. Objeto nulo se arrojó un error.
También utilicé las Page.Header.InnerHtml
y InnerText += "<link .... "/>
pero lanzaron el error Literal, que es un error común.
Utilicé este código:
List<Literal> cssFiles = new List<Literal>();
cssFiles.Add(new Literal() { Text = @"<link href=""" + ResolveUrl("~/Resources/Styles/MainMaster/MainDesign.css") + @""" type=""text/css"" rel=""stylesheet"" />" });
cssFiles.Add(new Literal() { Text = @"<link href=""" + ResolveUrl("~/Resources/Styles/MainMaster/MainLayout.css") + @""" type=""text/css"" rel=""stylesheet"" />" });
AddStyleRange(cssFiles);
private void AddStyleRange(List<Literal> cssFiles)
{
foreach (Literal item in cssFiles)
{
this.Header.Controls.Add(item);
}
}
Al principio funcionó, pero cuando cambio las páginas, dejó de funcionar.
Estoy usando la página maestra y estoy escribiendo estos códigos en el archivo Master.cs
y también a algunas personas que recomiendan usar esto. this.Header
lugar de Page.Header
pero cuando lo construí Page.Header
un error que dice que no puedo declararlo así.
No debería ser tan difícil agregar muchos estilos.
Se está complicando.
Defino un <link>
HTML genérico y configuro el atributo href mediante programación.
Por ejemplo, en la página <head>
tengo:
<link id="cssStyle" runat="server" rel="stylesheet" type="text/css" />.
Luego, en Page_Load, establezca la propiedad Href de cssStyle:
cssStyle.Href = "path/to/Styles.css";
Parece un poco más limpio con la ventaja de tener el control de diseño para colocar el <link>
en el orden deseado.
Fui un paso más allá, quería un método que me ClientScriptManager.RegisterClientScriptInclude()
agregar incluir duplicados, algo como ClientScriptManager.RegisterClientScriptInclude()
. La solución es dar una identificación al control agregado en la sección de encabezado.
if (!String.IsNullOrEmpty(Key))
if (Page.Header.FindControl(Key) != null) return;
HtmlLink link = new HtmlLink();
if (!String.IsNullOrEmpty(Key)) link.ID = Key;
link.Href = StyleUrl;
link.Attributes.Add("type", "text/css");
link.Attributes.Add("rel", "stylesheet");
Page.Header.Controls.Add(link);
Para el artículo completo escribí: http://www.idea-r.it/Blog.aspx?Article=49
Pegaré lo que funcionó para mí:
HtmlLink link = new HtmlLink();
//Add appropriate attributes
link.Attributes.Add("rel", "stylesheet");
link.Attributes.Add("type", "text/css");
link.Href = "/Resources/CSS/NewStyles.css";
link.Attributes.Add("media", "screen, projection");
//add it to page head section
this.Page.Header.Controls.Add(link);
Incluso busqué mucho en esto, me gustaría agregar una hoja de estilo de reemplazo cuando se hace clic en un botón. Usé el código anterior y funcionó perfectamente para mí.