Возврат в состояние страницы после вызова страницы удаления файла

Моя форма позволяет пользователям выбирать каталог для просмотра файлов, содержащихся в нем:

(Files.cfm)

<form action="#buildURL('main.files')#" method="post">

        <!--- Show the subfolder path, unless already at top level --->
        <cfif subfolderPath EQ "">
            <h2>You are at the top level.</h2>
        <cfelse>
            <h2>Current Folder: #subfolderPath#</h2>
        </cfif>

        <!--- Provide a drop-down list of subfolder names --->
        Select folder:
        <select name="subfolderPath" onChange="this.form.submit()">
            <!--- Provide an option to go up one level to the parent folder, --->
            <!--- unless already at the BaseFolder --->
            <cfif listLen(subfolderPath, "/") gt 0>
                <cfset parentFolder = listDeleteAt(subfolderPath, listLen(subfolderPath, "/"), "/")>
                <option value="#parentFolder#">[parent folder]</option>
            </cfif>

            <!--- For each record in the query returned by <cfdirectory> --->
            <cfloop query="DirectoryQuery">
                <!--- If the record represents a subfolder, list it as an option --->
                <cfif Type eq "Dir">
                    <option value="#subfolderPath#/#Name#">#Name#</option>
                </cfif>
            </cfloop> 
        </select>

        <!--- Submit button to navigate to the selected folder --->
        <input type="submit" value="go">
    </form> 

Когда файлы отображаются, появляется функция удаления, которая вызывает другую страницу:

<td align="absmiddle"><a href="#buildUrl('main.deleteFile?filename=#name#&folder=#rereplace(subFolderPath, '/','')#')#" onClick="alert('Are you sure you want to delete this file?')"><img src="/art/assets/images/delete.png" title="delete file" /></a></td>

На странице deleteFile (deleteFile.cfm) файл удаляется:

<cfset local.filePath = ExpandPath( ".\upload\views\files\#rereplace(url.folder, '/','')#\" ) />
    <cffile action="delete"
            file="#local.filePath##url.filename#"
    />

Затем пользователь возвращается на предыдущую страницу:

<cflocation url="#buildUrl('main.files')#" />

Но не в том же представлении каталога, из которого файл был только что удален. Как я могу вернуть пользователя на страницу файлов и сохранить вид каталога, в котором он находился?

1 ответ

Решение

Я могу придумать пару методов

Во-первых, вы можете вызвать файл действия удаления с помощью AJAX. После успешного завершения удалите элемент с текущей страницы. Это причудливый способ, но его может быть трудно осуществить, так как, похоже, вы новичок в этом.

Во-вторых, вы можете отправить контекст текущей страницы вместе с файлом удаления (переменная subFolderPath), добавить его в каталог cflocation при перенаправлении. Похоже, у вас уже есть это с переменной url.folder, поэтому вы должны сделать это:

<cflocation url="#buildUrl('main.files', "subfolderPath=#rc.folder")#" />

Похоже, вы используете FW/1, поэтому я предположил, что buildURL() работает так, как объявлено, а ваши переменные url & form находятся в rc объем.

Как только вы вернетесь на свою начальную страницу из cflocation, вы захотите вернуть выбор обратно в выбранную вами папку. В вашем цикле, который создает <option> теги, добавьте проверку, чтобы увидеть, если опция должна быть выбрана. Я бы обычно делал что-то вроде этого:

<option value="..." <cfif listLast(rc.subFolderPath,"\") EQ name>selected</cfif>>#name#</option>
Другие вопросы по тегам