【问题标题】:AJAX Request to Method Contained in Class File对类文件中包含的方法的 AJAX 请求
【发布时间】:2019-05-05 15:56:52
【问题描述】:

我正在尝试在 Razor 页面上发出 AJAX 请求,调用包含在单独类文件中的方法(不在页面的页面模型中 - 因为我最终想从多个不同页面发出相同的请求)。

很遗憾,请求失败。我认为这可能与我使用的语法有关,或者可能与我试图调用的类的类型错误有关。请注意,如果我将 url 更改为 pagemodel 中的方法(无需其他更改),请求确实有效。

我对 ASP.NET Core Razor 页面和 AJAX 请求还很陌生,所以如果这里有根本的误解,请告诉我。

AJAX 请求代码 (jQuery):

$(document).ready(function () {
    $.ajax({
        dataType: 'json',
        url: '/Tools/Redirect?handler=AccessRedirect',
        type: 'GET',
        success: function (data) {
            alert("Request Success, Data = " + data);
        },
        error: function () {
            alert("Request Failed");
        }
    });
})

(我也尝试过url: /Tools/Redirect/AccessRedirect 使用一种简单称为AccessRedirect 的方法,带有[HttpGet] 属性,但这也不起作用)

C#类代码(文件为Tools文件夹中的Redirect.cs):

    public class Redirect
    {
        public JsonResult OnGetAccessRedirect()
        {
            return new JsonResult("test");
        }
    }

非常感谢任何帮助。谢谢。

【问题讨论】:

  • 1.你的Redirect 必须派生自Controller 并且必须有RedirectController 之类的后缀... 2. 你的路线是什么?
  • JsonResult 是否存在于页面的.cshtml.cs 文件之外?我认为您不能将 JsonResult 放在页面代码文件之外,为什么不使用静态方法创建静态类并使用该方法返回 JsonResult 呢?注意:Razor 页面必须派生自 PageModel 而不是 Controller
  • 您是否添加了防伪请求令牌?见stackoverflow.com/questions/46410716/…

标签: c# jquery ajax asp.net-core-mvc razor-pages


【解决方案1】:

您的基本误解是 Razor Pages 请求必须针对 PageModel 类中的处理程序方法。您不能将 URL 映射到类文件中的任意方法。处理程序方法必须在派生自PageModel 的类中,并且它们必须遵循某些约定。

您可以在此处阅读有关 Razor 页面中处理程序方法的更多信息:https://www.learnrazorpages.com/razor-pages/handler-methods

如果您有想要集中的代码,您可以将其放在 C# 类中,然后在处理程序方法中调用该方法

【讨论】:

  • 感谢您的建议 - 这是有道理的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-05-02
  • 1970-01-01
  • 2018-08-22
  • 1970-01-01
  • 2011-02-10
  • 2011-08-22
  • 1970-01-01
相关资源
最近更新 更多