Wpis z mikrobloga

JAKIM CUDEM TO NIE DZIAŁA - przy kliknieciu w przycisk submit ajax w JS nie zostaje wysołany (to jest partial view, JS jest dodany w głównym widoku)

@model TaskManager.Application.Project.Command.DeleteProject.DeleteProjectCommand

<button type="button" class="btn btn-danger" data-bs-toggle="modal" data-bs-target="#deleteprojectmodal">
Delete Project
</button>

<div class="modal fade" id="deleteProjectModal" tabindex="-1" aria-labelledby="deleteProjectModalLabel" aria-hidden="true">
<div class="modal-dialog">
<div class="modal-content">
<form asp-action="Delete">

<div class="modal-header">
<h5 class="modal-title" id="deleteProjectModalLabel">Delete Project</h5>
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
</div>
<div class="modal-body">
<div asp-validation-summary="ModelOnly" class="text-danger"></div>

<input asp-for="EncodedName" class="form-control" type="hidden" />

</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Close</button>
<input type="submit" value="Delete" class="btn btn-danger"> //o tym przycisku mowa
</div>
</form>
</div>
</div>
</div>

@section Scripts {
@{
await Html.RenderPartialAsync("_ValidationScriptsPartial");
}
}

JS

$(document).ready(function () {
const DeleteProject = () => {
$.ajax({
url: `/projects/delete`,
type: 'delete',
success: function (data) {
toastr["success"]("Project has been deleted");
},
error: function () {
toastr["error"]("Something went wrong");
}
});
}

$("#deleteprojectmodal form").submit(function (event) {
event.preventDefault();

$.ajax({
url: $(this).attr('action'),
type: $(this).attr('method'),
data: $(this).serialize(),
success: function (data) {
toastr["success"]("Created project")
DeleteProject()
},
error: function () {
toastr["error"]("Something went wrong")
}
})
});
});

90% aplikacji to backend a w JS spędzam pewnie z 60% czasu XD
#js #javascript #naukaprogramowania #frontend
  • 14
@iluvmypickle: W kodzie, który dostarczyłeś, wygląda na to, że masz małą literówkę w atrybucie data-bs-target w elemencie button. Nazwa identyfikatora modalu deleteProjectModal powinna być napisana zgodnie ze stylem camelCase, jednak masz zapisaną jako deleteprojectmodal. Poniżej jest poprawiony fragment kodu:

html
Copy code
<button type="button" class="btn btn-danger" data-bs-toggle="modal" data-bs-target="#deleteprojectmodal">
Delete Project
</button>
Zmiana polega na tym, że nazwa identyfikatora modalu (#deleteprojectmodal) musi dokładnie pasować do tego, co jest określone w
@iluvmypickle:

<div class="modal fade" id="deleteProjectModal" tabindex="-1" aria-labelledby="deleteProjectModalLabel" aria-hidden="true">

deleteProjectModal to id które jest w html

$("#deleteprojectmodal form")

w js próbujesz operować na nieistniejącym elemencie zmień na

$("#deleteProjectModal form")