我在特定情况下很难进行绑定。我将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) {
}
});