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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ASP.NET Core - 在没有Ajax的情况下调用javascript中的控制器方法相关的知识,希望对你有一定的参考价值。

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

我见过很多人使用Ajax,但问题是我想调用控制器,而控制器又将用户重定向到View“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;
});

我也尝试过简单地使用

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

但它返回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);
}

正如Ajax所期望的那样,它确实返回了View,但它将它作为对ajax查询的响应返回,因此它不会重定向并显示我想要的View。

答案

你只想改为重定向。

window.location.href = '@Url.Action("EditProject", "Project")' + '/' + id

可能有一种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);
}

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

另一答案

你可以这么做

window.location.href = '@Url.Action("EditProject", "Project",new { id = ID })';

如果您的默认路由没有问题,则无需更改Action方法路由。

以上是关于ASP.NET Core - 在没有Ajax的情况下调用javascript中的控制器方法的主要内容,如果未能解决你的问题,请参考以下文章

ASP.Net Core使用Ajax局部更新

asp.net core mvc 异步表单(Ajax.BeginForm)

Asp.net Core 3.1 - 用 Ajax 打开视图?

ASP.NET Core 模型未通过 AJAX 绑定到控制器

[Asp.Net Core]ExceptionFilter

CORS 不适用于从 Ajax 到 ASP.NET Core Web API 的调用