【问题标题】:How to load a background image from a database?如何从数据库中加载背景图像?
【发布时间】:2014-01-18 07:29:00
【问题描述】:

我希望允许用户从 SQL 下载图片,这些图片将在我的网站上成为他们的背景。

我已经在各个地方使用上传的图片作为前景对象,所以我知道存储和检索正在工作,我通常DataBind()asp:FormView,但现在我正在尝试使用这张图片作为<body> 中的背景,但 <body> 需要一个 URL 字符串。

这就是我所拥有的。我在这个问题上遇到了困难,找不到答案。

<body style="background-image:url(<%# GetBodyStyle() %>">

代码隐藏:

public object GetBodyStyle()
{
  object bodyBackgroundImageUrl = BodyBackgroundImageUrl;

  //Make adjustments
  return bodyBackgroundImageUrl;
}

我有另一个子程序从名为 FetchImage 的数据库中获取我的图像,它返回一个数据表:

protected object BodyBackgroundImageUrl
{
  get
  {
    DataCalls DataCall = new DataCalls();
    return DataCall.FetchImage("MyBackgroundImageID");
  }

【问题讨论】:

  • 如何在 FormView 上显示图像?你的代码是什么?
  • @ShadowWizard 这很容易。 frmHeader.DataSource = DataCall.FetchImageByName(); frmHeader.DataBind();
  • frmHeader 到底是什么?图片标签本身是如何在您的标记中定义的?
  • @ShadowWizard Like this. 不幸的是我可以'不使用
  • 首先,您需要这样的 HTML:&lt;body style="background-image:url(Image.aspx?id=MyBackgroundImageID);"&gt;,然后根据给定的 ID 从数据库中获取图像并在Image.aspx 中作为原始流输出。

标签: asp.net css database background-image


【解决方案1】:

我的建议是创建一个图像处理程序:

您可以像标准“ashx”文件一样创建它

<%@ WebHandler Language="C#" Class="getImage" %>
 using System;
 using System.Web;

 public class BackGroundImageHandler : IHttpHandler {

     public void ProcessRequest (HttpContext context) {
         //return content from dabase and render image
        // probably using context.Response.BinaryWrite
     }

     public bool IsReusable {
         get  {
             return false;
         }
    }
 }

如果您希望拥有自己的扩展程序,您可以生成一个 dll 并在 web.config 中对其进行配置,例如:

<configuration>
   <system.web>
     ...
     <httpHandlers>
      <add verb="*" path="backimage.img" type="Sample.BackGroundImageHandler, Sample" />
     </httpHandlers>

使用您问题中的代码和 ASHX 解决方案:

<body style="background-image:url(BackGroundImage.ashx)">

请记住,您可以配置处理程序以访问会话,并查询字符串变量,例如:

<body style="background-image:url(BackGroundImage.ashx?id=something)">

您可以在此处找到更多信息:

read image from folder and database

【讨论】:

  • 我现在意识到我错误地定义了我的问题。真正的问题是在 标签中使用它。我在其他地方使用过图像处理程序,但似乎无法让它们专门在 中工作。请看这个屏幕截图:imgur.com/cq0p7aQ 底部的图像处理程序有效,顶部的处理程序不起作用,因为 标签在绑定到数据库的 FormView 之外。注释掉的行有效,但是是硬编码的。
  • 去掉你不需要的
  • 我无法删除
【解决方案2】:

在一些读者的帮助和this page 的帮助下,我设法解决了这个问题。

真正的问题是我无法访问数据库并使用它在&lt;body&gt; 标记中返回的变量。我已经在其他地方使用了图像处理程序,但这不适用于&lt;body&gt; 标签。所以这就是我所做的:

我写了一个存储过程来获取图片的ID。

然后我把&lt;body&gt;标签改成这样:

<body id="MasterPageBodyTag" runat="server">

在代码隐藏 (C#) 中我添加了这个:

  public HtmlGenericControl BodyTag
  {
    get
    {
      return MasterPageBodyTag;
    }
    set
    {
      MasterPageBodyTag = value;
    }
  }

在 Page_Load 事件中我放了这个:

BackgroundImageID = DataCall.FetchImageIDByName(MySchoolName, "MasterBackground");
BodyTag.Attributes.Add("style", "background-image:" + "url(Handler.ashx?puid=" + BackgroundImageID.ToString() + ");");

注意:FetchImageIDByName 返回存储过程的 ID。 有一个名为 Handler.ashx 的图像处理程序。

现在它可以工作了。我要感谢所有给我一些宝贵时间的人。这永远不够。 2014 年最美好的祝愿。

【讨论】:

    【解决方案3】:
     Try below link you might get your answer
    

    Try this

    【讨论】:

    • 不需要仅仅指向另一个资源的答案。这就是 cmets 的用途,或者标记为重复。
    • 我之前看到过那个线程并花了几个小时试图操纵代码以进行数据库检索,但没有得到答案。在链接中使用代码的问题在于它不会从数据库中获取图片,而是从 URL 中获取。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-26
    • 2019-08-24
    相关资源
    最近更新 更多