می توانیم کد و مدل در یک فایل .cshtml یا درون فایل code behind که مختص فایل cshtml قرار بدهیم - پسوند فایل code behind این cshtml.cs است.
متدهای Handler یا Razor page Handlers راهی برای اتصال درخواست های کاربر به متد های ما هستند. درخواست ها از فایل cshtml آمده است.
(هندلر-Handler یعنی مدیریت کننده یا اداره کننده - همینطوری گفتم یک وقتی اگر سوال پیش اومد معنیش چی هست)
نام گذاری Razor page ها از قرارداد خاصی پیروی میکنند.خود asp.net core برای ما چندتا از این handler متد ها را برای ما تولید میکند که عبارت اند از:
با مشاهده لیست بالا ما میتوانیم به الگوی خاص نامگذاری پی ببریم. همه آنها با On شروع میشوند بعد از آن نوع فعل http مثلا Get یا Post و بعد از آن نام اختیاری Handler و در نهایت هم اگر متد ما async باشد باید کلمه Async به انتهای نام آن اضافه شود.
نمونه GitHub اینجاست.
GET و POST Handlers پیشفرض
هنگام باز شدن یک Page به صورت پیشفرض Get یا GetAsync Handler درون Code behind ما صدا زده میشود. همین اتفاق برای form پیشفرض که submit فشرده میشود برای Post یا PostAsync اتفاق می افتد:
مپ میشود به :
(مپ شدن یک اصطلاح هست معنیش میشه وصل شدن ، تطبیق پیدا کردن ، روی هم قرار دادن)
هردو OnPostAsync یا OnPost به خوبی کار میکنند. اگر می خواهید با OnPost کار کنید code شما نباید async باشد.
اگر بخواهید همزمان از متد های OnPostAsync یا OnPost Handler استفاده کنید، به این مشکل بر میخورید:
نام های سفارشی Handler
علاوه بر نام های پیشفرض Handler، ما میتوانیم نام های سفارشی ایجاد کنیم.
فرض کنید در cshtml کدزیررا داریم:
کد Html بالا یک فیلد Description ساده به ما میدهد:
در Razor Pages برای Match کردن (همخوانی داشتن) فرم ما با متد Handler در فایل code behind - cshtml.cs باید نام آن را به درستی انتخاب کنیم: OnPostFirst یا OnPostFirstAsync ، بسته به نوع کدی که می خواهیم درون این اجرا کنیم.ما می خواهیم از طریق متد های async فریمورک انتیتی (EntityFramework) دسته بندی ها (category ها) را داخل دیتابیس insert و ذخره کنیم:
به اسمش دقت کنید OnPostFirstAsync
چندین POST Handler در یک Page
اجازه دهید آخرین کد cshtml با اضافه کردن یک فرم Post دیگر گسترش دهیم.
در cshtml داریم:
سپس دو فرم به دو متد ما در کد match میشود:
نکته کلیدی این است که handler درون فرم با کمک Tag Helper (تگ هلپر) asp-page-handler مشخص میشود.
از این رو،میتوانیم با یک فرم به یک چیز دسترسی داشته باشیم، و دو submit input درون فرم داشته باشیم (یک فرم با چند POST):
پارامتر های متد Handler
برای ورودی (input) یک فرم به عنوان پارامتر یک Handler (متد)، نام ها باید هماهنگ(sync) باشند.
نام ورودی HTML باید با نام پارامتر متد handler یکسان باشد (match باشند) -- همون مدل binder خودمونه! :
ارسال پارامتر ها ازطریق route ها
در اینجا دو مثال از ارسال پارامتر ها از طریق route داریم:
هدف اولی متد search handler هست .که "Core" به عنوان query parameter ارسال میکند.
هدف دومی متد delete handler و id (یک) 1 را ارسال میکند. بدین معناست که route اول را حذف میکند.