首页 > 解决方案 > 如何从 Razor Pages 渲染屏幕对 MVC 控制器进行异步调用

问题描述

我正在使用 Razor Pages,但我需要对 MVC 控制器进行异步调用,以便我可以设置会话变量并将用户设置保存到数据库中。这是适用于所有页面的横切关注点。我看不到任何方法可以像使用父控制器那样为 Razor Pages 提供超类,因此这似乎是一个可以接受的解决方法。但是,我收到了 HTTP 405 响应,这意味着 Web 服务器可以识别该路由,但不允许该路由。

public class DefaultController : Controller
{
    public IActionResult Index()
    {
        return View();
    }

    [HttpGet("Default/UpdateSelectedPermit/{id}")]
    public IActionResult UpdateSelectedPermit(string id)
    {
        HttpContext.Session.SetString("Permit", id);
        return Json("success");
    }
}

这是前端:

 $("#permitsSelect").on('change', function (e) {
    console.log('Permit selection change: ' + $(this).val());

    $.ajax({
        method: "POST",
        url: 'Default/UpdateSelectedPermit/' + $(this).val(),
        contentType: 'application/json; charset=utf-8'
    });
});

标签: jqueryasp.net-mvcrazor-pages

解决方案


看起来您正在尝试POST设置为GETwith的控制器操作HttpGet。您可以将 ajax 更改为 a GET,或将控制器更改为HttpPost

405 错误表示Method Not Allowed https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/405

$.ajax({
    method: "GET",
    url: 'Default/UpdateSelectedPermit/' + $(this).val(),
    contentType: 'application/json; charset=utf-8'
});

推荐阅读