ОК, о чем говорит Кендрик (в основном), использует серверные элементы управления для отслеживания того, какой файл удалить.То, что вы делаете сейчас, - это сброс разметки в элемент управления 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