Soru StyleSheets'i Programlı Olarak Asp.Net'e Ekleme


Ben StyleSheets programın baş bölümünde programlı eklemek istiyorum ama gördüğüm örneklerden biri çok fazla ihtiyacım olsa bile sadece bir stil sayfası eklemek için birçok kod satırına ihtiyaç duyuyordu:

Örnek kod:

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);

Ben de kullanıyorum Page.Header.RenderControl() yöntem ama işe yaramadı. Nesne boş bir şey hatası atıldı.

Ben de kullandım Page.Header.InnerHtml ve InnerText += "<link .... "/> şeyler ama onlar yaygın hata olduğunu düşünüyorum ki, ben bir hata yaptım.

Bu kodu kullandım:

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);
   }
}

İlk başta çalıştı ama sayfaları değiştirdiğimde çalışmayı durdurdu.

Ana Sayfa kullanıyorum ve bu kodları Master.cs dosya ve ayrıca bazı kişilerin kullanılması önerilir this.Header yerine Page.Header ama inşa ettiğimde, bunu böyle ilan edemeyeceğimi söyleyen bir hata atar.

Birçok stil eklemek çok zor olmamalı.

Bu karmaşıklaşıyor.


25
2018-05-31 10:57


Menşei




Cevaplar:


Tamam, şu an kullandığım çözüm:

Bir yardımcı sınıf oluşturdum:

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);
        }
    }
}

ve sonra bu yardımcı sınıf aracılığıyla, tek yapmam gereken:

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);
//...

Bu yüzden istediğim kadarını bir satır basit kod ile ekleyebilirim.

Ayrıca Masterpage ve içerik sayfası ilişkileri ile çalışır.

Umarım yardımcı olur.

P.S.: Bu ve diğer çözümler arasındaki performans farkını bilmiyorum ama daha şık ve tüketilmesi kolay görünüyor. Daha iyi yollar biliyorsanız, lütfen bana bildirin. Teşekkürler...


44
2018-06-03 20:04



Bulduğum bir getka: <head> etiketinizin runat = "server" olduğundan emin olun, aksi takdirde kod bulamaz. - SteveCav


Benim için çalışan şeyi yapıştırırı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);

Bu konuda çok fazla arama yaptım bile, bir buton tıklandığında geçersiz kılma stili ekleyebilirim. Yukarıdaki kodu kullandım ve bana mükemmel çalıştı.


5
2018-05-31 12:13



Ve BTW, bir ana sayfa kullanıyorum ve düğme altbilgideydi; yapıştırılan kod gibi. - Kay
Teşekkürler ama yukarıda bahsettiğim bu yüzden bu çözümü istemiyorum. Aslında çözümü buldum :) - Tarik
Bu harika! Çözdüğünüz çözümü bana bildirir misiniz? - Kay
Cevabımı gönderdim. Hemen okuyabilirsiniz :) - Tarik


Genel bir HTML tanımlıyorum <link> ve href özniteliğini program aracılığıyla ayarlayın.

Örneğin, sayfada <head> Sahibim:

<link id="cssStyle" runat="server" rel="stylesheet" type="text/css" />.

Sonra Page_Load içinde cssStyle'nin Href özelliğini ayarlayın:

cssStyle.Href = "path/to/Styles.css";

Tasarım kontrolüne sahip olmanın tersi ile biraz daha temiz görünüyor <link> istenilen sırada.


3
2018-01-23 05:45





Bir adım daha ileri gittim, eklemek imkansız kılan bir yöntem eklemek istiyorum. ClientScriptManager.RegisterClientScriptInclude(). Çözüm, Header bölümünde eklenen kontrole bir ID vermektir.

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);

Yazdığım tüm yazı için: http://www.idea-r.it/Blog.aspx?Article=49


2
2017-07-31 08:55