首页 > 解决方案 > 在 ASP.NET/C# 中,如何从数据库中获取数据到 CSS 样式表中?

问题描述

我在 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 样式表中会更好。但是,我已经尝试过了,但没有成功。

数据库列

有没有办法做到这一点?

标签: c#asp.netdatabasewebforms

解决方案


根据您的代码,我假设您使用的是 ASP.NET Web 窗体框架。正如评论中提到的,没有理由不能创建.aspx文件来输出 CSS 样式表。虽然 Web 窗体默认输出 HTML(即text/html),但它可以用于输出 JavaScript、JSON 甚至是 PNG 等二进制文件。

显然,要创建 CSS 样式表,您不会想要使用任何输出 HTML 的固执己见的服务器控件。而且,为了安全起见,您应该将 设置ContentTypetext/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

希望这可以帮助!


推荐阅读