我正在尝试向razor页面方法发送一些数据,但问题是在方法中它始终为0
。
下面是代码:
Razor Page:
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);
}
});
}
答案 0 :(得分:4)
page
本质上是一个保留名称。你遇到的问题实际上非常简单,但非常微妙:
当它看到一个查询字符串参数时,ASP.NET Core 2.0 Razor Pages框架会将其解释为当前Razor页面的名称 - 您可以看到,如果您将page
参数更改为类型{{ 1}};它实际上包含当前页面的名称。在您的情况下,因为类型是string
,模型绑定过程不能将字符串(名称)绑定到数字,因此将其设置为int
。
解决此问题的一种方法是使用其他名称。 e.g:
0
- 和 -
public IActionResult OnGetProducts(int pageNumber)
在Github上围绕这个问题进行了一些讨论,但这并不是针对您的情况的。我建议您搜索或提出一个新问题,专门讨论在Razor页面中使用查询字符串参数。
作为不相关的旁注,您无需在data: {
pageNumber: page,
handler: 'Products'
}
请求中设置Content-Type
标头 - 这是在您发送内容时使用的,而您不是。