Удаление динамически заполненных изображений из каталога (НЕ GridView) ASP.NET (VB) - PullRequest
0 голосов
/ 31 мая 2011

Приведенный ниже код отображает миниатюру каждого изображения в определенном каталоге сервера, и когда я нажимаю на изображение, оно выскакивает красивое полноразмерное изображение. Работает отлично.

Однако я хотел бы иметь возможность удалить изображение. Сначала я подумал, что мог бы иметь кнопку внизу страницы с флажком рядом с каждым изображением, давая ему уникальный идентификатор в соответствии с именем файла, но поскольку они создаются динамически, я не мог понять, как обрабатывать событие Click на кнопке для случайно названного идентификатора флажка. Затем я попытался добавить кнопку рядом с каждым элементом, а затем попробовал 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

Ответы [ 2 ]

2 голосов
/ 01 июня 2011

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

Это было бы отличным примером того, как использование данных на основе данных сделало бы вашу жизнь намного проще.

Тем не менее, если вы не хотите использовать серверный элемент управления, вы можете назначитьИдентификатор для каждого флажка (т.е. DeleteImage_1), а затем сохраните идентификатор и имя связанного изображения в состоянии просмотра на странице.Пройдите по установленным флажкам и вернитесь к состоянию просмотра для имени, которое идет с каждым идентификатором, когда они нажимают кнопку удаления.

...