无法在Razor Pages中使用ajax获取json数据

时间:2017-12-02 16:37:33

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

我正在尝试从ASP.NET Core 2.0中的Razor Pages获取一些数据。

但问题是它不会返回任何数据。 我也试过调试它,它根本不会触发那个方法(OnGetProducts)。

模型Index.cshtml.cs:

    private IProductRepository _productRepository;

    public IndexModel(IProductRepository repository)
    {
        _productRepository = repository;
    }

    public void OnGet()
    {

    }

    public IActionResult OnGetProducts(int page)
    {
        var model = _productRepository.GetProducts().Skip(page * 10).Take(10);

        return new JsonResult(model);
    }

剃刀页面Index.cshtml

<div id="products">
</div>

@section scripts{

<script>
    $(function () {
        getProducts(0);

    });


    var isInitialized = false;

    function getProducts(page) {
        $.ajax({
            type: 'GET',
            url: "Products",
            contentType: "application/json",
            dataType: "json",
            data: {
                handler: 'Products',
                page: page
            },
            success: function (datas) {
                console.log(datas);
            }
        });
    }
</script>

}

P.S。此页面位于文件夹Pages / Products / Index.cshtml(.cs)

1 个答案:

答案 0 :(得分:0)

我通常使用razor函数生成URL而不是在js中对它们进行硬编码。如果您的操作甚至没有被触发,假设您没有意外处于发布模式,这是因为URL未指向正确的位置。首先在razor中设置js变量,如下所示:

var productsURL = @Url.Context("~/products");

还可以在浏览器中运行您的域名/产品,如果您获得404.

或者我使用此函数直接在js中使用c#对象:

public static IHtmlContent ToJS(this IHtmlHelper htmlHelper, object obj)
   => htmlHelper.Raw(JsonConvert.SerializeObject(obj));

在静态类中创建此函数,您还可以直接创建一个js对象:

<script>
    var products = @Html.ToJS(repository.GetProducts().Skip(page * 10).Take(10));
</script>

当然这只会在页面加载中创建对象,如果你希望它在页面加载后改变,你可以考虑通过ajax创建一个局部视图。另请注意,第二种替代方案将比ajax的第一种方案慢。