我正在尝试将一些数据发送到剃刀页面方法,但问题是在方法中它始终需要0
.
代码如下:
剃刀页面:
public IActionResult OnGetProducts(int page)
{
var products = _productRepository.GetProducts();
decimal pagesInDecimal = (products.Count() / 18);
var totalPages = pagesInDecimal % 1 == 0 ? pagesInDecimal : pagesInDecimal + 1;
products = products.Skip((page - 1) * 20).Take(20);
return new JsonResult(new {
totalPages = totalPages,
products = products
});
}
Ajax:
getProducts(1);
function getProducts(page) {
$.ajax({
type: 'GET',
url: "/Products",
contentType: "application/json; charset=utf-8",
dataType: "json",
data: {
page: page,
handler: 'Products'
},
beforeSend: function (xhr) {
xhr.setRequestHeader("XSRF-TOKEN",
$('input:hidden[name="__RequestVerificationToken"]').val());
},
success: function (datas) {
console.log(datas);
}
});
}
page
本质上是使用 ASP.NET Core 2.0 Razor Pages 时的保留名称。你遇到的问题实际上很简单,但也很微妙:
当它看到查询字符串参数时,ASP.NET Core 2.0 Razor Pages 框架会将其解释为当前 Razor 页面的名称 - 您可以看到,如果您更改page
要输入的参数string
;它实际上包含当前页面的名称。在你的情况下,因为类型是int
,模型绑定过程无法将字符串(名称)绑定到数字,因此将其设置为0
.
解决此问题的一种方法是使用不同的名称。例如。:
public IActionResult OnGetProducts(int pageNumber)
-and-
data: {
pageNumber: page,
handler: 'Products'
}
有相当多的讨论around这个问题关于Github,但这并不特定于您的场景。我建议您搜索或提出一个新问题,专门讨论在 Razor 页面中使用查询字符串参数。
作为不相关的旁注,您不需要设置Content-Type
标头在你的$.ajax
请求 - 当您发送内容而不是发送内容时使用此请求。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)