在 Razor 页面中对 AJAX 请求使用 OnPost 页面处理程序
Using OnPost Page Handlers for AJAX Requests in Razor Pages
我有一个 JavaScript/jQuery 函数用于执行 AJAX 请求,作为 ASP.NET Core Razor Pages (Visual C#) 项目的一部分。 AJAX 请求调用它被调用的任何页面的 PageModel (.cshtml.cs) 中的 "OnGet" 处理程序方法。
AJAX 请求 JS/jQuery:
function conditionalDropDown(parameters) {
//code to get handler method inputs in correct format
var pathname = window.location.pathname;
var handler = "?handler=ConditionalDropDown";
var actionpath = pathname + handler;
$.ajax({
dataType: 'json',
url: actionpath,
type: 'GET',
data: {
parameterName: parameterValue
},
beforeSend: function (xhr) {
xhr.setRequestHeader("XSRF-TOKEN",
$('input:hidden[name="__RequestVerificationToken"]').val());
},
success: function (data) {
//dealing with the data returned by the request
},
error: function () {
alert("AJAX Request Failed, Contact Support");
}
});
}
PageModel 中的处理程序方法:
public JsonResult OnGetConditionalDropDown(parameters)
{
//call a function to get the return string
return new JsonResult(dropdownHTML);
}
我想更改我的 AJAX 请求,使其使用 "OnPost" 处理程序方法。我尝试将 AJAX 请求函数中的 type: 'GET'
更改为 type: 'POST'
,并将处理程序方法的名称从 OnGetConditionalDropDown
更改为 OnPostConditionalDropDown
,但请求总是失败。
我已将 @Html.AntiForgeryToken()
添加到发送 AJAX 请求的页面 (.cshtml),但我不确定它是否在正确的位置。目前,我将它放在调用 AJAX 请求的表单的 <form>
标签中。
我想我在设置请求的方式中遗漏了一些东西,但我不知道它是什么。非常感谢任何帮助。
回答我自己的问题...
- AJAX 请求 - 删除了请求中的
beforeSend
函数,替换为:请求初始化中的 headers: { "RequestVerificationToken": $('input[name="__RequestVerificationToken"]').val() },
。
- AJAX 请求 - 将
type: 'GET'
更改为 type: 'POST'
- 处理程序方法 -
OnGet
--> OnPost
- 页面 .cshtml - 删除了
@Html.AntiForgeryToken()
,添加了 method="post"
到发出 AJAX 请求的表单
现在完美运行!
我有一个 JavaScript/jQuery 函数用于执行 AJAX 请求,作为 ASP.NET Core Razor Pages (Visual C#) 项目的一部分。 AJAX 请求调用它被调用的任何页面的 PageModel (.cshtml.cs) 中的 "OnGet" 处理程序方法。 AJAX 请求 JS/jQuery:
function conditionalDropDown(parameters) {
//code to get handler method inputs in correct format
var pathname = window.location.pathname;
var handler = "?handler=ConditionalDropDown";
var actionpath = pathname + handler;
$.ajax({
dataType: 'json',
url: actionpath,
type: 'GET',
data: {
parameterName: parameterValue
},
beforeSend: function (xhr) {
xhr.setRequestHeader("XSRF-TOKEN",
$('input:hidden[name="__RequestVerificationToken"]').val());
},
success: function (data) {
//dealing with the data returned by the request
},
error: function () {
alert("AJAX Request Failed, Contact Support");
}
});
}
PageModel 中的处理程序方法:
public JsonResult OnGetConditionalDropDown(parameters)
{
//call a function to get the return string
return new JsonResult(dropdownHTML);
}
我想更改我的 AJAX 请求,使其使用 "OnPost" 处理程序方法。我尝试将 AJAX 请求函数中的 type: 'GET'
更改为 type: 'POST'
,并将处理程序方法的名称从 OnGetConditionalDropDown
更改为 OnPostConditionalDropDown
,但请求总是失败。
我已将 @Html.AntiForgeryToken()
添加到发送 AJAX 请求的页面 (.cshtml),但我不确定它是否在正确的位置。目前,我将它放在调用 AJAX 请求的表单的 <form>
标签中。
我想我在设置请求的方式中遗漏了一些东西,但我不知道它是什么。非常感谢任何帮助。
回答我自己的问题...
- AJAX 请求 - 删除了请求中的
beforeSend
函数,替换为:请求初始化中的headers: { "RequestVerificationToken": $('input[name="__RequestVerificationToken"]').val() },
。 - AJAX 请求 - 将
type: 'GET'
更改为type: 'POST'
- 处理程序方法 -
OnGet
-->OnPost
- 页面 .cshtml - 删除了
@Html.AntiForgeryToken()
,添加了method="post"
到发出 AJAX 请求的表单
现在完美运行!