ASP.NET Core - 在没有 Ajax 的 javascript 中调用控制器方法

Nen*_*oxx 5 javascript controller asp.net-core-mvc

我想调用我的控制器“Project”的方法“EditProject”,参数是项目的 Id。

我见过很多人使用 Ajax,但问题是我想调用控制器,然后控制器将用户重定向到视图“EditProject”,我不想停留在同一页面上

这是我在发现它不起作用之前尝试过的代码:

$('.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;
});
Run Code Online (Sandbox Code Playgroud)

我也试过简单地使用

$.get("/Project/EditProject/" +id); 
window.location.href = '@Url.Action("EditProject", "Project")' + '/' + id;
window.location.href = ("/Project/EditProject/" +id);
Run Code Online (Sandbox Code Playgroud)

但它返回 404 错误。

调用的方法非常简单:

[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);
}
Run Code Online (Sandbox Code Playgroud)

正如 Ajax 所预期的那样,它确实返回了视图,但它将它作为对 ajax 查询的响应返回,因此它不会按照我的意愿重定向和显示视图。

Unc*_*ave 3

您只想重定向到那里。

window.location.href = '@Url.Action("EditProject", "Project")' + '/' + id
Run Code Online (Sandbox Code Playgroud)

可能有一种 MVC 方式来传递你的 id @Url.Action,但我不太熟悉它 - 字符串连接应该可以工作。

控制器可能不明白什么/1意思。您可能需要将其更改为以下内容:

[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);
}
Run Code Online (Sandbox Code Playgroud)

这告诉 MVC 期望您的参数来自路由。