显示使用ASP.net存储在文件夹中的所有图像

问题描述:

我想在我的图像文件夹中显示所有图像。 这是我的代码:显示使用ASP.net存储在文件夹中的所有图像

<% 
string dir = Server.MapPath("Content/slideshow/images"); 
string[] files; 
int numFiles; 
files = System.IO.Directory.GetFiles(dir); 
numFiles = files.Length; 

for (int i = 1; i < numFiles; i++) 
{ 
%> 
<i><a href="#"> 
<img src="/Content/slideshow/images/image<%= i %>.jpg" alt="" height="239px" width="930px" /> 
    </a></i> 
<% }%> 

当我像这样的代码,它仅显示有名称为“形象” +等等等等等等的图像。但我想在一个文件夹中以不同名称呈现所有图像。 任何人都可以解决这个问题吗?先谢谢了。

+4

这段代码有太多错误,我甚至不知道从哪里开始。 –

+2

如果这真的是一个mvc应用程序,你真的错过了这一点,你不应该在视图中做这种逻辑 –

+0

实际上,它不在我的View中,它在Master Page中。 – Nothing

公共DisplayImages() {

System.IO.DirectoryInfo dir = new System.IO.DirectoryInfo(Location); 
foreach (System.IO.FileInfo f in dir.GetFiles("*.*")) 
{ 
    //Do Something 
} 

}

我建议你使用视图模型来实现这一点。因此,让我们定义这样开始:

public class ImageViewModel 
{ 
    public string Url { get; set; } 
} 

那么我们就可以有一个控制器动作,将填充此视图模型(或精确地为它的集合):

public class ImagesController: Controller 
{ 
    [ChildActionOnly] 
    public ActionResult Images() 
    { 
     var appData = Server.MapPath("~/Content/slideshow/images"); 
     var images = Directory.GetFiles(appData).Select(x => new ImageViewModel 
     { 
      Url = Url.Content("~/Content/slideshow/images/" + Path.GetFileName(x)) 
     }); 
     return PartialView(images); 
    } 
} 

那么我们可以定义一个相应的部分视图(~/Views/Shared/Images.ascx):

<%@ Control 
    Language="C#"  
    Inherits="System.Web.Mvc.ViewUserControl<IEnumerable<ImageViewModel>>" 
%> 
<%= Html.DisplayForModel() %> 

下一个将被呈现为每个图像(~/Views/Shared/DisplayTemplates/ImageViewModel.ascx)对应的显示模板:

<%@ Control 
    Language="C#"  
    Inherits="System.Web.Mvc.ViewUserControl<ImageViewModel>" 
%> 
<img src="<%= Model.Url %>" alt="" height="239px" width="930px" /> 

和剩下的最后一部分是在一个视图或母版页某处包括这个孩子的行动:

<%= Html.Action("Images", "Images") %> 
+0

请注意用户的输入。就像SQL注入一样,黑客也可以使用枚举文件系统的代码来破解网站。 –

+0

@Jeremy Bell,你在哪里看到我的例子中有用户输入? –

+0

我没有看到你的例子。只是对使用View页面的内嵌代码尝试枚举文件系统的开发人员说明一个普遍关注点。 –