[英]How do you display a list of images, from a folder on hard drive, on ASP.NET website?
我正在嘗試制作一個簡單的照片庫網站。 使用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++;
}
}
首先,您需要將要顯示的圖像放在Web樹下。 我們假設您已經完成了這些操作,並且它們位於名為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控件。 這很快,但是有效,應該是一個很好的起點。
您正在創建一個URL為C:\\Users\\Jordan\\Desktop\\Web Images\\SomeImage.jpg
的<img>
元素C:\\Users\\Jordan\\Desktop\\Web Images\\SomeImage.jpg
。 顯然,這不適用於Web瀏覽器。
您應該將圖像復制到項目的子文件夾中,並將URL設置為相對URL,如下所示:
img.ImageUrl = "~/Web Images/" + Path.GetFileName(s);
(假設Web Images
文件夾是應用程序根目錄的子文件夾)
例如
您需要有一種方法來指定圖像在應用中的存儲位置。 因此,您需要一個包含其中路徑的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();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.