【问题标题】:Cannot pass data with ajax to razor pages无法使用 ajax 将数据传递到剃须刀页面
【发布时间】:2018-05-30 14:22:21
【问题描述】:

我正在尝试将一些数据发送到剃须刀页面方法,但问题是在方法中它始终采用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);
        }
    });
}

【问题讨论】:

    标签: c# ajax asp.net-core asp.net-core-2.0 razor-pages


    【解决方案1】:

    page 本质上是使用 ASP.NET Core 2.0 Razor 页面时的保留名称。你遇到的问题其实很简单,但也很微妙:

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

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

    public IActionResult OnGetProducts(int pageNumber)
    

    -和-

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

    Github围绕这个问题进行了相当多的讨论,但这并不特定于您的场景。我建议您搜索或提出一个专门讨论在 Razor 页面中使用查询字符串参数的新问题。

    作为不相关的附注,您不需要在您的 $.ajax 请求中设置 Content-Type 标头 - 这在您发送内容时使用,但您不需要。

    【讨论】:

      猜你喜欢
      • 2021-06-29
      • 1970-01-01
      • 2022-10-13
      • 2020-01-30
      • 2020-05-13
      • 2021-04-05
      • 2020-11-02
      • 2021-12-22
      • 2019-05-17
      相关资源
      最近更新 更多