如何在转发器或网格控件中显示图像?

时间:2009-11-12 19:01:45

标签: asp.net gridview repeater

我有大约200张图片要显示在页面上。

数据库仅存储图像所在的路径。图像本身存储在应用程序的文件夹中。 EG:d:/ application / website / images /

  • 我需要在显示缩略图时将原始大小的图片转换为缩略图
  • 有没有这方面的功能?
  • 理想情况下,显示屏将有5行和5列,然后使用分页显示其余数据。

基本上,图片库:应用程序在网格/转发器页面上显示缩略图图像,当用户点击该缩略图时,将打开一个新的弹出窗口,显示整个图像。我可以使用转发器控件来完成这项工作吗?

知道如何在转发器控件中显示缩略图图像。

是否有任何网站可以帮助我?

2 个答案:

答案 0 :(得分:1)

首先,我需要说在服务器上存储缩略图可能比这个解决方案更有效。在上传图像时,此代码中的一些原则可用于创建这些缩略图。这可能是一个更好的方式。

话虽如此,这是一个可能的解决方案。这很快被黑客攻击,但确实有效。我使用类似的东西来提供数据库中的附件。创建一个新的ashx页面如下:

<%@ WebHandler Language="C#" Class="Handler" %>

using System;
using System.Web;
using System.Drawing;
using System.IO;
using System.Drawing.Imaging;

public class Handler : IHttpHandler
{
    public void ProcessRequest(HttpContext context)
    {
        Bitmap b = new Bitmap(@"c:\temp\pictures\" + context.Request.QueryString["filename"]);

        Image i = b.GetThumbnailImage(48, 48, null, System.IntPtr.Zero);

        using (MemoryStream ms = new MemoryStream())
        {
            i.Save(ms, ImageFormat.Jpeg);
            context.Response.BinaryWrite(ms.ToArray());
        }

        context.Response.ContentType = "image/jpeg";
    }

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

这将找到一个文件,该文件的名称从查询字符串传入,并创建缩略图并使用内存流来显示图像。您显然必须调整路径,错误处理,确保mime类型正确等等。

完成此操作后,您可以在转发器中使用此网址(例如http://localhost/Handler.ashx?filename=myFirstImage)来生成缩略图。

答案 1 :(得分:0)

我知道这篇文章现在已经很老了,但它对任何人都有帮助。我有同样的问题,并使用了这个编码。

配置文件

<add key="WebResources" value="~/Assets/WebResources/" />
<add key="ImageRoot" value="Images\Web" />
<add key="ProfileImages" value="Images\Profile" />

Asp.Net Datalist

<asp:DataList ID="dlPrivateAlbum" runat="server" OnItemCommand="dlPublicAlbum_ItemCommand" RepeatDirection="Horizontal" RepeatLayout="Flow">
<ItemTemplate>
    <div class="boxgrid captionfull">
        <asp:Literal ID="lit_ImagePath" runat="server" Text='<%# Eval("URL") %>' Visible="false" />
        <asp:HyperLink runat="server" Target="_blank" ToolTip='<%#Eval("Description") %>' 
            ImageUrl='<%# ConfigurationManager.AppSettings["WebResources"] + ConfigurationManager.AppSettings["ProfileImages"] + @"\thumbs\" + Eval("URL") %>' 
            NavigateUrl='<%# ConfigurationManager.AppSettings["WebResources"] + ConfigurationManager.AppSettings["ProfileImages"] + @"\" + Eval("URL")  %>' />
        <div class="cover boxcaption">
            <asp:LinkButton ID="lnkbtn_Edit" runat="server" CommandArgument='<%# Eval("ID") %>' CommandName="edit" CssClass="captionlink" Text='<%#Eval("Title") %>' />
        </div>
    </div>
</ItemTemplate>

CSS:

.boxcaption{float:left;position:absolute;background:#000;height:70px;width:100%;opacity:.8;filter:progid:DXImageTransform.Microsoft.Alpha(Opacity=80);-MS-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=80)"}
.captionfull .boxcaption{top:230px;left:0}
.caption .boxcaption{top:190px;left:0}
.captionlink:link, .captionlink:visited {color: #E2E2E2;text-decoration: none;}
.captionlink:hover { text-decoration: underline; }
.captionlink:active {color: #F5F5F5;}

代码背后:

private void load(Guid userID)
{
    try
    {
        loadOptions();
        DbContext = new Entities();

        user = DbContext.UserProfiles.FirstOrDefault(d => d.UserID == userID);

        List<Album> albums = DbContext.Albums.Where(d => d.UserID == userID).ToList();

        if (albums != null)
        {
            dlPublicAlbum.DataSource = albums.FirstOrDefault(d => d.Type == "public").Images;
            dlPublicAlbum.DataBind();               
        }
    }
    catch (Exception ex)
    {
        Msg.ShowAlert(this.Parent.Page, Msg.GeneralError_Title + " " + ex.GetType().Name, ex.Message, MsgType.Error);
    }
}