2017-12-02 28 views
0

ASP.NET Core 2.0のRazor Pagesからデータを取得しようとしています。レイザーページで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> 

} 

P.S.このページをフォルダ/ Products/Index.cshtml(.cs)

+1

失敗したajax呼び出しをデバッグしようとすると、私の最初の本能は、エラーコールバックを設定し、私に言っていたことが間違っているのを見ることになります... –

+0

ブラウザでF12を押して、 +コンソール。 – CalC

+0

私は同様の質問をし、最終的には動作するようにしました(前のコメントを参照)。しかし、AJAX呼び出し用のWeb APIコントローラの作成がより簡単でより良いアプローチであると判断しました。 –

答えて

0

私は通常、jsでハードコードするのではなく、URLを生成するために剃刀関数を使用します。アクションが起動されていない場合でも、誤ってリリースモードになっていないと仮定すると、URLが正しい場所を指していないためです。まず、このようなかみそり何かのすべてのセットのjsの変数の:

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

また、お使いのブラウザでYOURDOMAIN /製品を実行して、あなたが404

を取得した場合に代わりに私が直接JSでC#のオブジェクトを使用するには、この機能を使用します:

<script> 
    var products = @Html.ToJS(repository.GetProducts().Skip(page * 10).Take(10)); 
</script> 
:静的クラスで作成されたこの機能を

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

、あなたも直接、このような何かをjsオブジェクトを作成することができます

もちろん、これはページロード時にのみオブジェクトを作成します。ページロード後に変更したい場合は、ajaxを使用して部分ビューを作成することを検討できます。また、2番目の選択肢がajaxの1番目の選択肢よりも遅くなることにも注意してください。

関連する問題