0

私の Web サイトでは、部分的な CMS を実装しています。ユーザーが実行できる機能の 1 つは、さまざまなファイルをアップロードして、必要と思われるページにリンクすることです。System.IOサーバー側でAJAX と C# を使用して、ユーザーが特定のディレクトリ内のファイルをアップロードまたは削除できるようにしています。

これに加えて、編集中のページのライブ プレビューがあります。既にパスされているファイルが削除された、 (javascript を使用して) プレビューを更新しようとするまで、すべてがうまくいっていました。

削除されたばかりのファイルへのパスには壊れたリンクが表示されるはずですが、代わりに正しい画像が表示されます (サーバー側のディレクトリを確認して手動で更新しても、実際には存在しないことが示されます)。

ここでこの SO の質問を見ました: WebApplication のファイルまたはディレクトリを自動更新しますが、私の場合は必ずしも適用されないようです (そうでなければ、画像を削除するだけでなく、画像を追加するときに問題が発生しないのはなぜですか)?

JavaScript/jQuery をチェックして何も見落としていないことを確認するのに何時間も費やしましたが、更新に関してはすべて 1 つの関数を介して行われるため、1 つまたは 1 つではなく、常に機能するか、常に中断する必要があります。他の時々。

サーバー側から削除された後でも、画像はクライアント側のどこかにまだ存在しますか? (繰り返しsrcますが、タグの属性は、imgC# で削除されたファイルを指しています。File.Delete(Server.MapPath("~/CMS Files/" + location + "/" + file));

Ajax 関数:

function deleteFile(event) {
    var fileToDelete = event.parent().find(".fileDiv").text();
    var fileLocation = $("input#pageLocation").val();

    var confirmation = confirm("Are you sure you want to permanently delete the file, \"" + fileToDelete + "\" from the \"" + fileLocation + "\" File Box?");

    if (confirmation) {
        $.ajax({
            url: "/AJAX Pages/Compute_Delete_File.cshtml",
            async: false,
            type: "POST",
            data: { location: fileLocation, file: fileToDelete },
            success: function (response) {
                refreshFileBoxes(); //<--Self made function that refreshes the boxes (again, using AJAX) that collect what files are in the directory. Funny that this part always reflects correctly, the existing files in the server-side directory.
                alert(response);
                updatePreview(); //<--This function recollects all the page data in an array of objects, and refreshes the preview accordingly.
            },
            error: function (jqXHR, textStatus, error) {
                alert("Oops! It appears there has been an AJAX error. You may need to refresh the page. Please save your work and refresh the page to see all files in the File Box.");
            }
        });
    }
}

Ajax 関数が指すサーバー側コード:

@{
    Layout = "";

    if (IsAjax)
    {
        var file = Request.Form["file"];
        var location = Request.Form["location"];

        File.Delete(Server.MapPath("~/CMS Files/" + location + "/" + file));

@:The file "@file" has been deleted.
    }
    else
    {
        Context.RedirectLocal("~/");
    }
}

プレビュー用の HTML

<div class="editPreview">
    <div id="Library" class="contentWrapper">
        <hr/>
        <p class="pageTitle">Library</p>
        <hr/>
        <div class="contentImageWrapper" sytle="max-width: 375px;">
            <img class="contentImgMedium" src="/CMS Files/Library/Okmulgee_Library.jpg" title="Okmulgee_Library.jpg" alt="Okmulgee_Library.jpg" />
        </div>
        <p class="contentParagraph" style=" text-align: center;">For more information about the Okmulgee Public Library, call (918)-756-1448.</p>
        <br/>
        <span class="contentText">Or visit their website at&nbsp;</span>
        <a class="contentLink" href="http://www.fakewebaddress.com" target="_blank">http://www.fakewebaddress.com</a>&nbsp;
        <br/>
        <hr/>
    </div>
</div>

知っておくべきこと:

私は C#.net の Web ページ環境 (WebMatrix を使用) にいます。必要なコードをさらに提供したいと思っていますが、すべてのファイル パスの性質上、jsfiddle は不可能です。

4

1 に答える 1