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

我想从ASP.NET Core 2.0中的Razor页面获取一些数据。无法在Razor页面中使用ajax获取json数据

但问题是它不返回任何数据。 我也尝试调试它,它根本不会触发该方法(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>

}

附:此页面位于文件夹Pages/Products/Index.cshtml(.cs)

回答:

我通常使用razor函数来生成URL,而不是在js中对其进行硬编码。如果您的操作没有被触发,假设您并非意外地处于发布模式,这是因为该URL没有指向正确的位置。首先设定JS在剃刀像这样的变量:

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

而且运行YOURDOMAIN /产品在您的浏览器,如果你得到一个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的第一种方法要慢。

以上是 无法在Razor页面中使用ajax获取json数据 的全部内容, 来源链接: utcz.com/qa/257293.html

回到顶部