در wb میادبرای اجرا اون فایل یه dll میسازه روی سیستم و بعد بازش میکنه ، مشکلش اینه که در مرورگرهای قدیمی ساپورتتت نمیشه wb و این که ما در این جا لاجیک رو کاملا با front داریم یعنی به خاطر وجود view model و امکانات دیگه کاملا میتونیم اجرایی کنیم front

اینجا front و back از هم جدا نیستن

هم server side رو support میکنه هم client side رو

اینجا توی این گزینه ها اومده هر side رو جدا کرده

برای این که یه app server side بسازیم میایم از این template استفاده میکنیم : چون که این template جدیده و اینطوری پروژه توسط net 8 و ورژن های بالاتر میشه ازش استفاده کرده

حالا میایم کنار این پروژه blazor web assembly رو هم میزاریم :

تفاوت این دو تا :

خوب توی blzaor server دیگه index.html رو نداریم

این فایل مسئول دانلود که application هستش در WB

حالا توی server اینجا میاد websocket client برای برقرای ارتباط بین client و server هست انجام میشه

این یعنی این که ما میتونیم از template که توی یه پروژه دیگه استفاده کردیم ببریمش در یه پروژه دیگه هم ازش استفاده کنیم

توی WB میاد یه فایل با حجم بیشتر رو دانلود میکنه و بعد برای اجراهای بعدی که سریعتر صفحه رو لود کنه میاد اون رو cache میکنه

خوب توی lunchsetting میاد debuggin tools که موجود هستش رو نشون میده :

خوب IIS هم هستش ، درسته که توی تنظیمات نیستش ، ولی وقتی که روش میزنیم یه سری تنظیمات دیگه براش ایجاد میشه

https://dotnettutorials.net/lesson/asp-net-core-launchsettings-json-file/

خوب inspectURL برای inspect کردن پروژه

خوب اینجا توی خط اول داریم مسیر ارتباط client رو تعیین میکنیم و در default layout هم داریم تعیین میکنیم که layout مون چیه

کلا router component ها وظیفه شون اینه که درخواست رو بگیرن و اون صفحه ای که درست هستش رو برای نمایش بیارن

اینجا میایم dependecy ها پروژه رو مینویسیم که توی پروژه ازشون استفاده کنیم مثل این مورد :

خوب حالا بیایم main layout رو بررسی کنیم :

حالا توی main layout که میریم اونجا نوشته که از layout component base داره ارث بری میکنه و توی این فایل Nav menu و body داخلشه

خوب حالا توی قسمت wwroot تمامی فایل های static پروژه مون توش هستش که مهمترینش index.html هستش

این خط قابلیت این رو به ما میده که head component های html رو ادیت کنیم که این قضیه شامل Page title و meta element ها میشه

اینجا navigation route برای بهتر کردن مسیر یابی و ارتباطشون با role ها

به طور مثال وقتی که تعداد اون counter تغییر میکنه یه بار دیگه render میشه و تعداد جدید رو نشون میده

اینجا به جای ul اومدیم از nav استفاده کردیم

تغییر میدیمش به :

بعد چون پوشه layout رو پاک کردیم و محتواش رو ریختیم توی shared اومدیم اینجا import اش کردیم

بعد میایم یه فولدر به اسم component میسازیم و بعد میایم یه razor page توش میسازیم :

پاک کردن تنظیمات IIS

قسمت 10 ببینم

اینطوری میتونیم به صورت یک طرفه دیتا بفرستیم یا مثلا razor page بفرستیم اینجا چیزی که داریم component parameter هستش

این کار رو با استفاده از routing parameter داریم انجام میدیم

حالا برای این که از این component که داریم ازش استفاده کنیم میایم و index رو ادیت میکنیم و بهش title رو اضافه میکنیم ، اینطوری :

خوب اینجا هم اومده یه صفحه تعریف کرده برای counter print بعد اومده به جای این که title رو به صورت hard code بزنه براش parameter تعیین کرده

بعد اومده توی صفحه پدر که میشه counter از اون صفحه counter print استفاده کرده و اومده توی صفحه والد یا پدر به title هم مقدار داده

حالا ما میخوایم وقتی که یه صفحه داریم میسازیم و داریم از component child داریم استفاده میکنیم میخوایم بهمون یه warning بده که این پارامتری که داخل اون child هستش نیاز داره که مقدار دهی بشه ، و برای این کار میایم از این راه استفاده میکنیم :

اینجا هم داره warning میده که اره این title اینجا مقدار دهی بشه

arbitary paramiter

خوب حالا میخوایم کاری کنیم که هم بشه عکس رو عوض کرد و هم متن رو ، برای این کار میایم این کار رو میکنیم :

اینطوری میایم ازش استفاده میکنیم :

بعد برای این که dynamic بودنش رو تست کنیم :

خوب cascading paramiter

یه موقع هایی میخوایم که از parent component یه مقدار یا چیزی رو بفرستیم به تمام child component دو راه داره با name و با type

خوب توی تصویر بالا ما یه مورد داریم که اون رو هم تعریف کردیم که این مقدارش رو دریافت میکنه از سمت parnet به صورت cascade

حالا اگر چند تا مورد رو بخوایم از سمت parent بفرستیم ، باید یه obj بفرستیم و اسمش by type فرستادنه که یه سری شرط داره

اول این که attribute که لازمه داشته باشه اینه که cascading parameter رو داشته باشه و بعد این که set باید داشته باشه : باید public باشه و بعد این که از همون نوعی باشه که در parent هست :

حالا یه راه دیگه اش ارسال با name هستش : توی cascading value ما اومدیم نوشتیم name و بعد اون اسم رو تعیین کردیم heading color

خوب میرسیم به قسمت Debugging

این خط کد بالا داره به برنامه این رو میگه که این پروژه از نوع wb و blazor هستش و میاد browser رو به debugger مون وصل میکنه

بعد میریم توی brower و میزنیم روی source

خوب یه چیزی داریم به اسم partial class که میاد لاجیکمون رو از html جدا میکنه خوب میایم یه فایل به اسم home.razor.cs درست میکنیم که اتوماتیک تشخیص داده میشه

اگر خواستیم چند تا هم کلاس partial داشته باشیم این کار رو با naming اش انجام میدیم میرسیم به قسمت render fragment

حالا میایم اسم دلخواهمون رو میزاریم

خوب میرسیم به life cycle ها که برای استفاده ازشون میایم و override اشون میکنیم اگر Action مون Async هستش میایم از life cycle async استفاده میکنیم

https://blazorschool.com/tutorial/blazor-wasm/dotnet6/component-lifecycle-527158

قسمت 19

وقتی که رو counter میزنیم :

حالا میایم تغییر ایجاد میکنیم :

آپدیت ui انجام نمیشه

وقتی که برمیگردیم توی home

خوب حالا برای logging اول میایم اون رو پروژه اضافه میکنیم :

خوب بعدش میایم برای این که همه ی ارور ها رو بهمون نشون بده ، سطح defualt logging رو عوض میکنیم :

خوب حالا بعدش میایم توی کد هر جا که console log استفاده کردیم میایم اون رو با logger log عوض میکنیم

خوب حالا میخوایم سطح بعدی این log ها رو ببریم توی appsetting که بعدا هر موقع که خواستیم بیایم و عوضش کنیم ، میایم و توی wwwroot این کار رو انجام میدیم

Severity Code Description Project File Line Suppression State Error (active) CS0246 The type or namespace name 'EventConsole' could not be found (are you missing a using directive or an assembly reference?) BlazorAppFront C:\Web\Soheil\LinkMeetShareProject\BlazorAppFront\Pages\Home.razor 62

برای رفع ارور بالا میگه که باید یه چیزی رو دانلود کنید که توی پکیج RADZEN نیست و میریم از روی گیت هابش دانلود میکنیم میزاریمش توی پروژه

https://forum.radzen.com/t/eventconsole-cs0246-error/9801/4