Удалить параметр изображения в форме редактирования

#c# #ajax #asp.net-core #razor-pages #delete-file

#c# #ajax #asp.net-ядро #razor-страницы #удалить-файл

Вопрос:

Я хочу удалить изображение в форме редактирования и показать опцию загрузки файла.Как я могу добиться этого с помощью Ajax, поскольку я использую панели вкладок для нескольких форм.

Вот мой код,

Biodata.cshtml

 <div class="form-group">
                <label class="control-label-staff"><b>Photo</b></label>
                @if (Model.ImageFiles != null)
                {
                    foreach (var item in Model.ImageFiles)
                    {
                        if (item.Name.Substring(0, 2) == "IM")
                        {
                            <span class="control-label-staff">
                                <img src="~/Documents/EmployeeAttachments/@Request.Query["EmpID"].ToString()/@item.Name" width="70px" height="70px" />
                            </span><br/>
                            <a asp-page-handler="RemoveImage" data-ajax="true" data-ajax-method="post" data-ajax-complete="RemoveImageCompleted">Delete</a>                            
                            
                        }
                    }
                }
                @if (Model.ImageFiles == null)
                {
                    <input type="file" asp-for="StaffPhoto" class="form-control-staff" accept="image/*" style="border:1px solid white;" />
                }
            </div>
 

Он не вызывает метод asp-page-handler. Прямое выполнение метода ajax.

 function RemoveImageCompleted(event) {
            if (event.responseText != "") {
                $("#Biodata").html(event.responseText);
            } else {
                alert("Image Has Been Deleted Successfully");
                $.ajax({
                    url:rootPath   "/Staff/Onboarding/Biodata",
                    type: "get",
                    success: function (result) {
                        $("#Biodata").html(result);
                        $('a[href="#Biodata"]').tab('show');
                    }
                })
            }
        }
 

Это мой метод asp-page-handler в BioData.cshtml.cs

 public async Task<IActionResult> OnPostRemoveImageAsync()
        {
            string filename = Request.Form["filename"];
            if (filename != null)
            {
                var Folder = StaffBioData.EmpID.ToString();
                string filedel = Path.Combine(_env.WebRootPath, "Documents/EmployeeAttachments", Folder, filename);
                FileInfo fi = new FileInfo(filedel);
                if (fi != null)
                {
                    System.IO.File.Delete(filedel);
                    fi.Delete();
                } 
            }
            return new OkResult();

        }
 

Любая помощь будет оценена.Спасибо.

Комментарии:

1. Привет, @ Teena, есть какие-нибудь обновления?

Ответ №1:

Ссылки — это запросы на получение. Вы не можете отправлять сообщения по ссылке; для этого и существуют формы. Вам понадобится что-то вроде:

 @if (Model.ImageFiles != null)
{
    foreach (var item in Model.ImageFiles)
    {
        if (item.Name.Substring(0, 2) == "IM")
        {
            @*<a asp-page-handler="RemoveImage" data-ajax="true" data-ajax-method="post" data-ajax-complete="RemoveImageCompleted">Delete</a>*@
            <form method="post" asp-page-handler="RemoveImage" data-ajax="true" data-ajax-method="post" data-ajax-complete="RemoveImageCompleted">
                <input type="submit" value="delete" />
            </form>
        }
    }
}
 

Комментарии:

1. Привет, Рена, извините за мой поздний ответ. Могу ли я использовать тег привязки вместо форм?