我正在尝试制作一个简单的照片库网站。使用ASP.NET和C#。 现在我没有设置服务器,但我只是使用Visual Studio在制作网站项目并运行时开始的开发。
我的硬盘上有一个包含未知数量图像的文件夹。我想写一段代码,将遍历每个图像并将它们添加到默认网页。我尝试过这段代码,但它不起作用。我究竟做错了什么?我应该使用ListView控件还是DataView或类似的东西?我是否需要添加虚拟目录才能访问图像?如果是这样,我该如何在这个测试服务器上使用它?
另外,如何设置这些图片的位置和对齐方式? 例如,我如何制作它以使图片垂直排列并在网页上居中?
protected void Page_Load(object sender, EventArgs e)
{
string[] filesindirectory = Directory.GetFiles(@"C:\Users\Jordan\Desktop\Web Images");
int i = 1;
foreach (string s in filesindirectory)
{
Image img = new Image();
img.ID = "image" + i.ToString();
img.ImageUrl = s;
img.Visible = true;
Page.Controls.Add(img);
i++;
}
}
答案 0 :(得分:17)
首先,您需要将要显示的图像放在网络树下。我们假设您已经完成了这些操作,并且它们位于名为Images的文件夹中。然后,您可以使用Repeater控件通过数据绑定来显示它们,如下所示:
像这样......
<asp:Repeater ID="RepeaterImages" runat="server">
<ItemTemplate>
<asp:Image ID="Image" runat="server" ImageUrl='<%# Container.DataItem %>' />
</ItemTemplate>
</asp:Repeater>
然后在你的代码背后:
protected void Page_Load(object sender, EventArgs e)
{
string[] filesindirectory = Directory.GetFiles(Server.MapPath("~/Images"));
List<String> images = new List<string>(filesindirectory.Count());
foreach (string item in filesindirectory)
{
images.Add(String.Format("~/Images/{0}", System.IO.Path.GetFileName(item)));
}
RepeaterImages.DataSource = images;
RepeaterImages.DataBind();
}
这基本上创建了一个图像数组,其中包含目录中的完整路径。 然后它创建一个包含图像虚拟路径的字符串列表。 然后它将List绑定到转发器,转发器显示其模板中的每个项目,该模板是使用路径作为ImageUrl的Image控件。它很快,但是有效,应该是一个很好的起点。
答案 1 :(得分:3)
您正在创建一个网址为<img>
的{{1}}元素。显然,这不适用于网络浏览器。
您应该将图像复制到项目的子文件夹中,并将URL设置为相对URL,如下所示:
C:\Users\Jordan\Desktop\Web Images\SomeImage.jpg
(假设img.ImageUrl = "~/Web Images/" + Path.GetFileName(s);
文件夹是应用程序根目录的子文件夹)
答案 2 :(得分:2)
例如
您需要有一种方法来指定图片在应用中的存储位置。 因此,您需要一个包含其中路径的Web配置文件。 或者,如果您想要真正有创意,可以将其存储在数据库中....
在您的网页
中 <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Images.aspx.cs" Inherits="ImageViewer" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>Viewer Demo</title>
<link href='styles.css' rel='stylesheet' type='text/css' />
</head>
<body>
<form id="form1" runat="server">
<div id="outer">
<h2>Viewer Demo</h2>
<br />
<div style="clear:both;">
<h4>Using Viewer with the Repeater Control</h4>
<p>Repeater control to display a collection of images.</p>
</div>
<div style="clear:both;">
<asp:Repeater ID="RepeaterImages" runat="server">
<ItemTemplate>
<asp:Image ID="Image" runat="server" ImageUrl='<%# Container.DataItem %>' />
</ItemTemplate>
</asp:Repeater>
</div>
<br />
</div>
</form>
</body>
</html>
在你的web.config
中 <appSettings>
<add key="FilePath" value="~/images"/>
</appSettings>
并在.cs文件后面的代码中 你真的需要过滤文件,如果有人(也许你;))放错了文件 在其中,你不会无意中包含它们......
string filters = "*.jpg;*.png;*.gif";
string Path = ConfigurationManager.AppSettings["FilePath"].ToString();
List<String> images = new List<string>();
foreach (string filter in filters.Split(';'))
{
FileInfo[] fit = new DirectoryInfo(this.Server.MapPath(Path)).GetFiles(filter);
foreach (FileInfo fi in fit)
{
images.Add(String.Format(Path + "/{0}", fi));
}
}
RepeaterImages.DataSource = images;
RepeaterImages.DataBind();