我正在尝试将一些数据发送到razor页面方法,但是问题在于方法中它总是以as的形式出现0。
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 }); }
阿贾克斯:
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时,实际上是保留名称。您遇到的问题实际上非常简单,但非常细微:
page
当它看到查询字符串参数时,ASP.NET Core 2.0 Razor Pages框架会将其解释为当前Razor Page的名称- 您可以看到,如果将page参数更改为type string;它实际上将包含当前页面的名称。在您的情况下,由于类型是an int,因此模型绑定过程无法将字符串(名称)绑定到数字,因此请将其设置为0。
string
int
解决此问题的一种方法是使用其他名称。例如:
public IActionResult OnGetProducts(int pageNumber)
-和-
data: { pageNumber: page, handler: 'Products' }
有一个讨论的公平位 围绕 在这个问题上Github上,但它不是具体到你的情况。我建议您搜索或提出一个新问题,专门讨论在Razor Page中使用查询字符串参数。
无关紧要的是,您无需Content-Type在$.ajax请求中设置标头-发送内容时会使用标头,而您不需要。
Content-Type
$.ajax