ASP.NET Core - Ajax kullanmadan JavaScript içinde kontrolcü metodunu çağırma
Kontrolcüm 'Project' içinde 'EditProject' metodunu, parametre olarak projenin Id'sini kullanarak çağırmak istiyorum.
Birçok kişinin Ajax kullandığını gördüm, ama sorun şu ki, ben kullanıcıyı "EditProject" Görünümüne yönlendirecek olan kontrolörü çağırmak istiyorum, aynı sayfada kalmak istemiyorum
İşte çalışmadığını anlamadan önce denediğim kod:
$('.edit-project').click(function (d) {
var id = $(this).attr('data-projectId');
$.ajax({
url: '@Url.Action("EditProject", "Project")',
data: { id: id },
type: "GET"
}).done(function() {
console.log("Done");
});
return false;
});Sadece kullanmayı da denedim
$.get("/Project/EditProject/" +id);
window.location.href = '@Url.Action("EditProject", "Project")' + '/' + id;
window.location.href = ("/Project/EditProject/" +id);
ama 404 hatası veriyor.
Çağrılan yöntem çok basit:
[HttpGet]
[Authorize(Roles = "Professional")]
public async Task<IActionResult> EditProject(int id)
{
Project p = await _unitOfWork.Projects.GetById(id);
ViewData["Title"] = "Modification du challenge " + p.ProjectName;
return View(p);
}
Ve Ajax ile beklendiği gibi, View'ı döndürüyor, ancak bunu Ajax sorgusuna bir yanıt olarak döndürüyor, bu nedenle benim istediğim gibi yönlendirmiyor ve View'ı göstermiyor.
Cevap #1
Sadece oraya yönlendirmek istiyorsunuz.
window.location.href = '@Url.Action("EditProject", "Project")' + '/' + id
ID'nizi @Url.Action'a geçirmek için bir MVC yolu olabilir ama bununla çok tanış değilim - string birleştirme işe yaramalı.
Kontrolör muhtemelen /1'in ne anlama geldiğini anlamıyor. Bunu şu şekilde değiştirmeniz gerekebilir:
[HttpGet("{id}", Name = "EditProject")]
[Authorize(Roles = "Professional")]
public async Task<IActionResult> EditProject([FromRoute] int id)
{
Project p = await _unitOfWork.Projects.GetById(id);
ViewData["Title"] = "Modification du challenge " + p.ProjectName;
return View(p);
}
Bu, MVC'ye parametrenizin rotadan gelmesini beklemesini söyler.
Cevap #2
Bunu basitçe yapabilirsiniz
window.location.href = '@Url.Action("EditProject", "Project",new { id = ID })';
Eğer varsayılan yönlendirmeniz uygunsa, Action yöntemi yönlendirmenizi değiştirmenize gerek yok.
