小编典典

无法使用Ajax将数据传递到剃须刀页面

ajax

我正在尝试将一些数据发送到razor页面方法,但是问题在于方法中它总是以as的形式出现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);
        }
    });
}

阅读 279

收藏
2020-07-26

共1个答案

小编典典

page在使用ASP.NET Core 2.0 Razor Pages时,实际上是保留名称。您遇到的问题实际上非常简单,但非常细微:

当它看到查询字符串参数时,ASP.NET Core 2.0 Razor Pages框架会将其解释为当前Razor Page的名称-
您可以看到,如果将page参数更改为type string;它实际上将包含当前页面的名称。在您的情况下,由于类型是an
int,因此模型绑定过程无法将字符串(名称)绑定到数字,因此请将其设置为0

解决此问题的一种方法是使用其他名称。例如:

public IActionResult OnGetProducts(int pageNumber)

-和-

data: {
    pageNumber: page,
    handler: 'Products'
}

有一个讨论的公平位 围绕
在这个问题上Github上,但它不是具体到你的情况。我建议您搜索或提出一个新问题,专门讨论在Razor
Page中使用查询字符串参数。

无关紧要的是,您无需Content-Type$.ajax请求中设置标头-发送内容时会使用标头,而您不需要。

2020-07-26