使用AJAX进行GET的Razor Pages PageModel绑定



我在特定情况下很难进行绑定。我将Razor Pages与ASP.NET Core 3.1一起使用,以充当AJAX调用的控制器。我已经将防伪令牌添加到Startup.cs:

services.AddAntiforgery(o => o.HeaderName = "XSRF-TOKEN");

我的AJAX调用包括调用中的防伪,看起来像:

function getTankConfig(tankId) {
var json = { id: tankId };
$.ajax({
cache: false,
type: "GET",
beforeSend: function (xhr) {
xhr.setRequestHeader("XSRF-TOKEN",
$('input:hidden[name="__RequestVerificationToken"]').val());
},
url: "/Tank/Config",
contentType: "application/json",
dataType: "json",
data: JSON.stringify(json),
success: getTankConfigSuccess
});
}
function getTankConfigSuccess(data) {
if (data !== null) {
// do stuff with data
}
}

我试过各种装订技巧。通常使用参数,添加[FromBody],添加公共属性并赋予其[BindProperty]属性,使用[BindProperty(SupportsGet = true)]。使用控制器做这件事似乎很简单,但我没有发现让它与Razor Pages和PageModels一起工作的魔力。

这是我的PageModel类的简化版本:

public class TankConfigModel : PageModel
{
public JsonResult OnGet(int id)
{
TankConfigViewModel config = new TankConfigViewModel();
config.Id = id;
return new JsonResult(config);
}
}

如有任何帮助或指导,我们将不胜感激。谢谢

您必须将其添加到您的剃刀页面中

@page "{id}"

并修复ajax

$.ajax({
type: "GET",
url: "/Tank/Config/"+tankId,
beforeSend: function (xhr) {
xhr.setRequestHeader("XSRF-TOKEN",
$('input:hidden[name="__RequestVerificationToken"]').val());
},

success: function (result) {
getTankConfigSuccess(result)
},
error: function (jqXHR) {
}
});

最新更新