无法在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