Razor Pages WebアプリのAsp.Net-CoreがPostメソッドで値を送信する

2020-08-01 c# asp.net-core

Razorページを持つAsp.Net-Core Webbアプリケーションで、urlおよびpostメソッドを介していくつかの値を送信することは可能ですか? MVCではHttpPostメソッドを使用することは知っていますが、.Net Coreでは不可能です。

たとえば、私のjsファイルには、パラメーターaを受け取るこの関数があります。

function redirect(a)
{
    $.ajax({
      type: 'POST',
      url: './MyPage', //I also tried @Url.Page("SetValue")'
      dataType: 'int',
      data: { a },
   });
}

この値をRazorページに送信できるようにしたいのですが、次のようなものです。

public void OnPostSetValue(int a)
{         
    Debug.WriteLine(a); //here I will use the value       
}

しかし、次のエラーが発生します:「リソースのロードに失敗しました:サーバーは500()[https:// localhost:44350 / MyPage]のステータスで応答しました」

多分これはそれを行う方法ではないことを知っていますが、私はMVCの例のみを見つけました。 Asp.Net Coreでこれを行う方法はありますか?

Answers

しかし、私はこのエラーを受け取ります:「リソースをロードできませんでした:サーバー 500のステータスで応答しました()[https:// localhost:44350 / MyPage] "

Razorページを使用してAsp.Net Coreでそれを行うことができます。

まず、ajaxのurlで特定のpost method name指定されていません。

次に、ajaxを使用してRazorページでパラメーターを渡す場合は特別な要件があります。偽造防止トークンを自分提供する必要があります 。つまり、ページビューに@Html.AntiForgeryToken()を追加してから、ajaxにheadersを追加する必要があります。偽造防止トークンを渡す。

詳細については、を参照してくださいこの

以下は完全な例です。

@page
@model WebApplication_razorpage_new.Pages.MyPageModel
@{
    ViewData["Title"] = "MyPage";
    Layout = "~/Pages/Shared/_Layout.cshtml";
}
 
@Html.AntiForgeryToken()
<input id="Button1" type="button" value="button" onclick="redirect(1)" />
 

@section Scripts{
    <script>
        function redirect(a) {
            $.ajax({
                type: 'POST',
                url: '@Url.Page("MyPage", "SetValue")',
                dataType: 'int',
                data: {a},
                headers: {
                    RequestVerificationToken: $('input:hidden[name="__RequestVerificationToken"]').val()
                }
            });
        }
    </script>
}

Related