簡體   English   中英

在 ASP.NET/C# 中,如何將數據從數據庫獲取到 CSS 樣式表中?

[英]In ASP.NET/C#, how do I get data from the database into a CSS stylesheet?

我在 ASP.NET 中有一個類可以從數據庫中檢索與樣式表相關的數據。

免責聲明:我知道這樣做不是最佳選擇,但這是我老師想要的。

我需要創建一個網站,除了標簽之外的所有內容(文本、背景圖像等)都直接來自數據庫。 我的問題是:我無法獲取我的數據並將其直接插入到我的 CSS 樣式表中。

我正在扭轉這樣的事情:

C# 代碼

SqlCommand body_bg = new SqlCommand("Select * from image_back where placement='body';", conn);
conn.Open();

SqlDataReader reader = body_bg.ExecuteReader();

while (reader) 
    bod_back = reader["nom"].ToString();

HTML 標記

<body runat="server" style="background-image:url(<%bod_back%>);">

注意:如果直接在 CSS 樣式表中會更好。 但是,我已經嘗試過,但沒有成功。

數據庫列

  • placement = BODY (我放置圖像的位置;例如,在這種情況下用於主體背景)
  • nom = /images/bodyback.jpg

有沒有辦法做到這一點?

根據您的代碼,我假設您使用的是 ASP.NET Web 窗體框架。 正如評論中提到的,沒有理由不能創建.aspx文件來輸出 CSS 樣式表。 雖然 Web 表單默認輸出 HTML(即text/html ),但它可用於輸出 JavaScript、JSON 甚至二進制文件,例如 PNG。

顯然,要創建 CSS 樣式表,您不會想要使用任何輸出 HTML 的自以為是的服務器控件。 而且,為了安全起見,您應該將ContentType設置為text/css這樣挑剔的瀏覽器就不會抱怨 MIME 類型不匹配。 但是,除此之外,這應該看起來就像一個普通的 Web 表單頁面。

鑒於此,您的代碼可能如下所示:

免責聲明:這將是偽代碼,因為我沒有准備好測試它的環境,而且我已經好幾年沒有編寫 ASP.NET Web 窗體代碼了。

styles.css.aspx.cs

Response.ContentType = "text/css";

var backgroundRecords = new SqlCommand("select * from image_back;", conn);
var backgroundImages = new Dictionary<string, string>();

conn.Open();

var reader = backgroundRecords.ExecuteReader();

while (reader) {
  backgroundImages.Add(
    reader["placement"].ToString(), 
    reader["nom"].ToString()
  );
}

BackgroundStyles.DataSource = backgroundImages;
BackgroundStyles.DataBind();

styles.css.aspx

<asp:Repeater id="BackgroundStyles" runat="server">
  <ItemTemplate>
    <%# Eval("Key") %> {
      background-image: url('<%# Eval("Value") %>');
    }
  </ItemTemplate>
</asp:Repeater>  

呼叫頁面

<link rel="stylesheet" href="styles.css.aspx">

筆記

  • 這不包括必要的腳手架,例如@Page指令或Page_Load事件
  • 這將查詢概括為適用於多個背景,因此您無需對每個元素進行查詢
  • 這假設每個元素類型只有一個背景(例如body
  • 這也將支持placement使用CSS類名(例如, .header

希望這可以幫助!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM