RazorPages初心者によるOnPostの注意です。
OnPost
はpublic
でないと無視される。少なくとも省略(internal
)ではOnPost
が呼び出されなかった。OnPost
はPOST時にOnGet
の代わりに呼び出される。順番に両方呼び出される訳ではない。※ドキュメント未確認- ページをリダイレクトしないなら
OnPost
でRedirectToPage
呼び出しは不要。呼び出すとGET扱いでURLが「~?key=value&...」になる。 OnPost
を使う場合は@page
の後で@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
が必須。未設定時にPOSTするとエラー400が発生する。※Google Chromeはエラーページが表示されますが、Firefoxはブランクページに飛ばされて混乱します。
簡単なサンプルコードは以下です。勉強中なので色々と間違っているかもしれません。
// Pages\Index.cshtml @page @addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers @{ @functions { [BindProperty] string Value1 { get; set; } = "TEST1"; public void OnGet() { } public IActionResult OnPost() { Value1 = Request.Form["Value1"].FirstOrDefault(Value1) + "@POST"; return Page(); } } } <!DOCTYPE html> <html lang="ja"> <head> <title>Untitled document</title> <meta charset="utf-8"/> </head> <body> <form method="post"> <input asp-for="Value1"/> <input type="submit"/> </form> </body> </html>
// Program.cs var builder = WebApplication.CreateBuilder(args); builder.Services.AddRazorPages(); var app = builder.Build(); if (!app.Environment.IsDevelopment()) { // app.UseExceptionHandler("/Error"); app.UseHsts(); } app.UseHttpsRedirection(); // app.UseStaticFiles(); app.UseRouting(); app.UseAuthorization(); app.MapRazorPages(); app.Run();