1

こんにちは、サーバーに保存されている写真を削除し、データベースから情報を削除するリンクを作成しようとしています。リンクをajaxで投稿したい。私はすべてを試しましたが、うまくいきません。

ただし、削除以外のことをしようとしている場合は機能します-たとえば、データベースのフィールドを更新します。

私が間違っているのは何ですか?

意見:

<div class="uploaded-property-pics clearfix">
    <ul>
        @foreach (var item in Model.PropertyPhotos) {
            <li>
                <img src="@Url.Content("~/PropertyImages/" + item.PropertyId + "/" + "tn_" + item.PhotoLocation + ".png")"/>
                <a href="/Property/DeletePhoto/@item.PropertyPhotosId" class="photo-delete-link">Delete</a>
            </li>
        }
    </ul>
</div>

JQuery:

<script>
    $('.photo-delete-link').click(function (e) {
        $.ajax({
            url: this.href,
            dataType: "text json",
            type: "POST",
            data: {},
            success: function (data, textStatus) { }
        });
        e.preventDefault();
    });
</script>

コントローラ:

    [HttpPost]
    [Authorize]
    public void DeletePhoto(int id)
    {
        var photo = websiteRepository.GetPhotoByPhotoId(id);
        var folder = Server.MapPath("~/PropertyImages/" + photo.PropertyId + "/");

        if (!Directory.Exists(folder))
        {
            var filePath = folder + photo.PhotoLocation + ".png";
            var thumbPath = folder + "tn_" + photo.PhotoLocation + ".png";
            websiteRepository.DeletePhotoFromServer(filePath);
            websiteRepository.DeletePhotoFromServer(thumbPath);
        }

        websiteRepository.DeletePhotoFromDb(photo);
    }

データアクセス:

    public void DeletePhotoFromDb(PropertyPhotos photo)
    {
        db.PropertyPhotos.Remove(photo);
    }

    public void DeletePhotoFromServer(string filePath) 
    {
        File.Delete(filePath);
    }
4

2 に答える 2

0

コントローラーメソッドに引数を渡す必要があります

$.ajax({
            url: this.href,//check this.href in debugger
            dataType: "text json",
            type: "POST",
            data: {Id: Id }, //pass argument here
            success: function (data, textStatus) { }
        });
于 2012-11-19T21:24:05.523 に答える
0

これはとてつもなく馬鹿げている!

微妙な条件エラー:

if (Directory.Exists(folder)) // Note the subtle condition difference
        {
            var filePath = folder + photo.PhotoLocation + ".png";
            var thumbPath = folder + "tn_" + photo.PhotoLocation + ".png";
            websiteRepository.DeletePhotoFromServer(filePath);
            websiteRepository.DeletePhotoFromServer(thumbPath);
        }

db 部分に関しては、データベースを保存していませんでした:

public void DeletePhotoFromDb(PropertyPhotos photo)
    {
        db.PropertyPhotos.Remove(photo);
        db.SaveChanges(); // Missing this line
    }
于 2012-11-19T22:20:39.027 に答える