2011-05-31 33 views
0

下面的代碼顯示了特定服務器目錄中每個圖像的縮略圖,當我單擊圖像時,它彈出一張漂亮的全尺寸圖片。它完美的作品。從目錄中刪除動態填充的圖像(不是GridView)ASP.NET(VB)

但是,我想要能夠刪除圖像。我第一次以爲我可以在頁面底部有一個按鈕,每個圖像旁邊有一個複選框,根據文件名給它一個uniqueID,但是當它們動態創建時,我無法確定如何處理按鈕上的Click事件爲一個隨機命名的複選框ID。然後我嘗試在每個項目旁邊添加一個按鈕,然後嘗試使用OnClick & OnServerClick調用Sub,但這也不起作用。

任何/所有建議歡迎:)

Private Sub ImageList() 
     If Directory.Exists(Server.MapPath("JobImages\" & DBC_JOB_JobID.Text)) Then 
      Dim MySB As New StringBuilder 
      Dim dirInfo As New DirectoryInfo(Server.MapPath("JobImages\" & DBC_JOB_JobID.Text)) 
      MySB.Append("<ul class=""clearfix"">") 
      MySB.AppendLine() 
      For Each File In dirInfo.GetFiles() 
       MySB.Append("<li><a rel=""jobpic"" href=""JobImages\" & DBC_JOB_JobID.Text & "\" & File.Name & """><img src=""JobImages\" & DBC_JOB_JobID.Text & "\Thumbs\" & File.Name & """ width=""150"" height=""100"" /> <span class=""size"">" & File.Name & " </span></a></li>") 
       MySB.AppendLine() 
      Next 
      MySB.Append("</ul>") 
      MySB.AppendLine() 
      lblMyPictures.Text = MySB.ToString 
     End If 
    End Sub 
+0

@Tim Schmelter - 相當新的asp.net,你可以分享如何做這樣的代碼?謝謝... – James 2011-05-31 19:05:59

回答

2

確定Kendrick在談論什麼(基本上)是使用服務器端控件來跟蹤要刪除的文件。你現在正在做的是將標記轉儲到Label控件中,該控件在回發時不會觸發服務器端的事件。但是,您可以使用服務器端控件輕鬆完成此操作。

基本思想是使用容器控件,如Panel,併爲其添加每個子控件。然後,將事件掛接到每行,並標識該行的數據(如文件名)。

標記:

<asp:Panel ID="pnlList" runat="server"> 
    </asp:Panel> 

代碼隱藏:

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load 
    If Directory.Exists(Server.MapPath("Files")) Then 
     Dim objDirInfo As New DirectoryInfo(Server.MapPath("Files")) 
     For Each objFile As FileInfo In objDirInfo.GetFiles() 
      Dim objLabel As New Label 
      objLabel.Text = objFile.Name 

      Dim objLinkButton As New LinkButton 
      objLinkButton.Text = "Delete" 
      objLinkButton.CommandName = "Delete" 
      objLinkButton.CommandArgument = objFile.Name 
      AddHandler objLinkButton.Command, AddressOf DeleteFile 

      Dim objLiteral As New LiteralControl 
      objLiteral.Text = "<br/>" 

      pnlList.Controls.Add(objLabel) 
      pnlList.Controls.Add(objLinkButton) 
      pnlList.Controls.Add(objLiteral) 
     Next 
    End If 

End Sub 

Public Sub DeleteFile(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.CommandEventArgs) 
    If e.CommandName = "Delete" Then 
     Dim strFileName As String = Server.MapPath("Files\" & e.CommandArgument) 
     If File.Exists(strFileName) Then 
      Dim objFile As New FileInfo(strFileName) 
      objFile.Delete() 
     End If 
    End If 
End Sub 
+0

對不起,我懶得回答我的答案。這是一個更好的答案。 – Kendrick 2011-06-01 17:10:58

0

這將是其中使用數據感知會讓你的生活變得更加簡單的一個很好的例子。也就是說,如果您不想使用服務器端控件,可以爲每個複選框(即DeleteImage_1)分配一個ID,然後將ID和關聯圖像名稱存儲在頁面的視圖狀態中。通過選中的複選框並返回視圖狀態,以查看單擊刪除按鈕時隨每個ID附帶的名稱。