2011-09-19 73 views
1

我想在我的圖像文件夾中顯示所有圖像。 這是我的代碼:顯示使用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

回答

0

公共DisplayImages() {

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

}

2

我建議你使用視圖模型來實現這一點。因此,讓我們定義這樣開始:

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頁面的內嵌代碼嘗試枚舉文件系統的開發人員說明一個普遍關注點。 –

相關問題