2011-05-31 29 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附带的名称。