در قسمت قبل مشاهده کردیم که چگونه میتوان کل برنامه را به صورت سراسری، تعاملی کرد تا بتوان توسط آن، Blazor Server سنتی را شبیه سازی نمود؛ اما ... آیا واقعا نیاز است چنین کاری را انجام دهیم؟! چون در این صورت از قابلیتهای جدید SSR به همراه Blazor 8x محروم میشویم. اگر کل قابلیتهای تعاملی مورد نیاز ما در حد یک فرم و ارسال اطلاعات آن به سمت سرور است، میتوان در Blazor 8x هنوز هم در همان حالت SSR قرار گرفت و از فرمهای جدید تعاملی آن استفاده کرد تا برای پردازش چنین مواردی، نیازی به برقراری اتصال دائم SignalR نباشد. جزئیات نحوهی کار با اینگونه فرمها را در ادامه بررسی میکنیم. امکان تعریف HTML Forms استاندارد در Blazor 8x فرمهای استاندارد HTML، پیش از ظهور جاوااسکریپت و SPAها وجود داشتند (دقیقا همان زمانیکه که فقط مفهوم SSR وجود خارجی داشت) و هنوز هم جزء مهمی از اغلب برنامههای وب را تشکیل میدهند. با ارائهی دات نت 8 و قابلیت server side rendering آن، کامپوننتهای برنامه، فقط یکبار در سمت سرور رندر شده و HTML سادهی آنها به سمت مرورگر کاربر بازگشت داده میشود. در این حالت، فرمهای استاندارد HTML، امکان دریافت ورودیهای کاربر و ارسال دادههای آنها را به سمت سرور میسر میکنند (چون دیگر خبری از اتصال دائم SignalR نیست و باید اطلاعات را به همان نحو استاندارد پروتکل HTTP، به سمت سرور Post کرد). در دات نت 8، دو راهحل برای کار با فرمها در برنامههای Blazor وجود دارد: استفاده از EditForm خود Blazor و یا استفاده از HTML forms استاندارد و ساده، به همان نحوی که بوده و هست. روش کار با EditForm در برنامههای Blazor SSR البته ما قصد استفاده از فرمهای سادهی HTML, ...ادامه مطلب
قالبهای پیشفرض Blazor 8x، به همراه قسمت بازنویسی شدهی ASP.NET Core Identity برای Blazor هم هستند که در این قسمت به بررسی نحوهی عملکرد آنها میپردازیم. معرفی قالبهای جدید شروع پروژههای Blazor در دات نت 8 به همراه قسمت Identity در قسمت دوم این سری، با قالبهای جدید شروع پروژههای Blazor 8x آشنا شدیم و هدف ما در آنجا بیشتر بررسی حالتهای مختلف رندر Blazor در دات نت 8 بود. تمام این قالبها به همراه یک سوئیچ دیگر هم به نام auth-- هستند که توسط آن و با مقدار دهی Individual که به معنای Individual accounts است، میتوان کدهای پیشفرض و ابتدایی Identity UI جدید را نیز به قالب در حال ایجاد، به صورت خودکار اضافه کرد؛ یعنی به صورت زیر: اجرای قسمتهای تعاملی برنامه بر روی سرور؛ به همراه کدهای Identity: dotnet new blazor --interactivity Server --auth Individual اجرای قسمتهای تعاملی برنامه در مرورگر، توسط فناوری وباسمبلی؛ به همراه کدهای Identity: dotnet new blazor --interactivity WebAssembly --auth Individual برای اجرای قسمتهای تعاملی برنامه، ابتدا حالت Server فعالسازی میشود تا فایلهای WebAssembly دریافت شوند، سپس فقط از WebAssembly استفاده میکند؛ به همراه کدهای Identity: dotnet new blazor --interactivity Auto --auth Individual فقط از حالت SSR یا همان static server rendering استفاده میشود (این نوع برنامهها تعاملی نیستند)؛ به همراه کدهای Identity: dotnet new blazor --interactivity None --auth Individual و یا توسط پرچم all-interactive--، که interactive render mode را در ریشهی برنامه قرار میدهد؛ به همراه کدهای I, ...ادامه مطلب
در قسمت قبل، با نامهایی مانند IdentityRevalidatingAuthenticationStateProvider و PersistingRevalidatingAuthenticationStateProvider آشنا شدیم. در این قسمت جزئیات بیشتری از این کلاسها را بررسی میکنیم. نحوهی پیاده سازی AuthenticationStateProvider در پروژههای Blazor Server 8x در کدهای زیر، ساختار کلی کلاس AuthenticationStateProvider ارائه شدهی توسط قالب رسمی پروژههای Blazor Server به همراه مباحث اعتبارسنجی مبتنی بر ASP.NET Core Identity را مشاهده میکنید: public class IdentityRevalidatingAuthenticationStateProvider : RevalidatingServerAuthenticationStateProvider { protected override TimeSpan RevalidationInterval => TimeSpan.FromMinutes(30); protected override async Task<bool> ValidateAuthenticationStateAsync( AuthenticationState authenticationState, CancellationToken cancellationToken) { // ... } } کار این کلاس، پیاده سازی کلاس پایهی RevalidatingServerAuthenticationStateProvider است. این کلاس پایه، چیزی نیست بجز یک کلاس پیاده سازی کنندهی AuthenticationStateProvider که در آن توسط حلقهای، کار یک تایمر را پیاده سازی کردهاند که برای مثال در اینجا هر نیم ساعت یکبار، متد ValidateAuthenticationStateAsync را صدا میزند. برای مثال در اینجا (یعنی کلاس بازنویسی کنندهی متد ValidateAuthenticationStateAsync که توسط تایمر کلاس پایه فراخوانی میشود) اعتبار security stamp کاربر جاری، هر نیم ساعت یکبار بررسی میشود. اگر فاقد اعتبار بود، کلاس پایهی استفاده شده، سبب LogOut خودکار این کاربر میشود. نحوهی پیاده سازی A, ...ادامه مطلب
مقدمه اگر شخص با سابقهای در دنیای فناوری اطلاعات و سیستمهای کامپیوتری باشید، زمانیکه کلمهی CodeBehind را میبینید یا میشونید، اولین نکتهای که به ذهن شما خطور میکند، صفحات Web-Form مایکروسافت در ASP.NET Standard است که دارای پسوند aspx هستند و بخش طراحی وب را از بخش کدهای سمت سرور جدا میکنند. مایکروسافت در گذشته اصرار زیادی به CodeBehind داشت (هرچند در حال حاضر، مایکروسافت الگوی MVC را پیشنهاد میکند). در JSP نیز امکان برنامه نویسی و طراحی وب با صفحات JSP با الگوی CodeBehind امکان پذیر بود؛ اما Web-Form مایکروسافت به صورت پیش فرض، مبتنی بر CodeBehind بود. البته باید این نکته را در نظر گرفت که CodeBehind یک الگوی برنامه نویسی هست و ربطی به Web-Form مایکروسافت یا JSP در جاوا ندارد و همچنان پرکاربرد هست. در این مقاله به MVC و همین طور صفحات aspx اشاره میکنیم اما به طور کامل به CodeBehind خواهیم پرداخت؛ البته یک CodeBehind دیگر! اگر ASP.NET Core را یک اسب قدرتمند وصف کنیم که بر روی زمین با غرور و افتخار میتازد، CodeBehind تحقق رویای یک سوارکار خردسال است که بر روی آن اسب سوار میشود و اسب را به پرواز در میآورد. CodeBehind جدید است، کوچک است، ساده است، بی نشان است؛ اما بسیار قدرتمند و منعطف است. ابایی از سرشاخ شدن با ساختار ASP.NET Core ندارد و خود را الماس دات نت مینامد. CodeBehind یک انقلاب در دات نت است که از صدای یک اعتراض حاصل شده؛ اعتراض به ساختار پیچیده، خشک و غیرقابل انعطاف ASP.NET Core و وضعیت آشفته و غیرقابل درک Controller آن (درک از باب چرایی وجود ساختار). نکته هایی قبل از خواندن مقاله: لطفا توجه داشته باشید که, ...ادامه مطلب
نصب Rust برای نصب rust، متناسب با سیستم عامل خود، ابتدا وارد سایت rustup شوید و فایل دانلود متناسب با سیستم عامل مورد نظرتان را دانلود و نصب کنید. Cargo چیست و چه کاربردی دارد؟ Cargo همراه با زبان برنامه نویسی Rust گنجانده شده، همزمان نصب میشود و برای ایجاد، ساخت و مدیریت پروژههای Rust استفاده میگردد. این یک رابط سطح بالا برای کار با کدهای Rust را ارائه میدهد که شروع به کار با Rust و مدیریت پروژههای خود را برای توسعه دهندگان آسانتر میکند. Cargo سیستم ساخت و package manager مخصوص زبان برنامه نویسی Rust است. ابزاری است که به توسعه دهندگان Rust کمک میکند تا پروژههای خود را با خودکارسازی کارهایی مانند کامپایل کد، مدیریت وابستگیها، اجرای آزمایشها و ایجاد بستههای قابل توزیع، مدیریت کنند. برخی از ویژگیهای Cargo Dependency management: برنامه Cargo میتواند بهطور خودکار وابستگیهای پروژههای Rust را دانلود کرده، بسازد و مدیریت کند. این باعث میشود توسعه دهندگان به راحتی کتابخانهها و ماژولهای جدیدی را به پروژههای خود اضافه کنند. Building and testing: برنامه Cargo میتواند پروژههای Rust را بسازد و testها را به صورت خودکار اجرا کند. همچنین گزینههایی را برای ساختن ساختهای بهینه یا اشکال زدایی فراهم میکند. Packaging: برنامه Cargo میتواند بستههای قابل توزیعی را مانند tarballs یا بستههای باینری را برای پروژههای Rust ایجاد کند. Customization: برنامه Cargo به توسعه دهندگان اجازه میدهد تا فرآیند ساخت برنامهی خود را با تعیین گزینههای ساخت مختلف، در فایل پیکربندی Cargo.toml سفارشی کنند. بهطور کلی Cargo توسعه و مدیریت پرو, ...ادامه مطلب
دات نت 7 به همراه دو متد جدید Order و OrderDescending است که مرتب سازی مجموعههای ساده را انجام میدهند. روش متداول مرتب سازی مجموعههای ساده تا پیش از دات نت 7 فرض کنید لیستی از اعداد را داریم: var numbers = new List<int> { -7, 1, 5, -6 }; تا پیش از دات نت 7 با استفاده از متدهای OrderBy و OrderByDescending موجود به همراه LINQ، امکان مرتب سازی صعودی و نزولی این لیست وجود دارد: var sortedNumbers1 = numbers.OrderBy(n => n); var sortedNumbers2 = numbers.OrderByDescending(n => n); که در اینجا ذکر پارامتر keySelector ضروری است: public static IOrderedEnumerable<TSource> OrderBy<TSource,TKey>( [NotNull] this IEnumerable<TSource> source, [NotNull] Func<TSource,TKey> keySelector) هرچند میشد طراحی آن سادهتر باشد و حداقل برای مجموعههای ساده، نیازی به ذکر آن نباشد. روش جدید مرتب سازی مجموعههای ساده در دات نت 7 دات نت 7 به همراه دو متد جدید Order و OrderDescending است که دیگر نیازی به ذکر پارامتر keySelector ذکر شده را ندارند: var sortedNumbers3 = numbers.Order(); var sortedNumbers4 = numbers.OrderDescending(); و امضای آنها به صورت زیر است: public static IOrderedEnumerable<T> Order<T>(this IEnumerable<T> source) public static IOrderedEnumerable<T> OrderDescending<T>(this IEnumerable<T> source) که در حقیقت دو متد الحاقی جدید قابل اعمال بر روی انواع و اقسام IEnumerableها هستند. در مورد سایر مجموعههای پیچیده چطور؟ فرض کنید کلاس User را: public class User { public string Name { , ...ادامه مطلب
واژهی کلیدی جدید required در C# 11.0، همانند خواص init-only که پیشتر معرفی شدند، با هدف آغاز و نمونه سازی دقیقتر و سادهتر اشیایی است که برای اینکار، به تعاریف ویژهی سازندهی کلاسها وابسته نیستند. امکان نمونه سازی بدون قید و شرط کلاسها تعریف کلاس Article1 را به صورت زیر درنظر بگیرید: public class Article1 { public string Title { get; set; } public string? Subtitle { get; set; } public string Author { get; set; } public DateTime Published { get; set; } } ساختار پروژههای دات نت 7 نیز به صورت پیشفرض به صورت زیر است: <Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> <OutputType>Exe</OutputType> <TargetFramework>net7.0</TargetFramework> <ImplicitUsings>enable</ImplicitUsings> <Nullable>enable</Nullable> </PropertyGroup> </Project> یعنی nullable reference types در آنها فعال است. با این فعال بودن، به اخطارهای زیر میرسیم: Non-nullable property 'Title' must contain a non-null value when exiting constructor. Consider declaring the property as nullable. [CS11Tests]csharp(CS8618) Non-nullable property 'Author' must contain a non-null value when exiting constructor. Consider declaring the property as nullable. [CS11Tests]csharp(CS8618) عنوان میکند که خاصیتهای Title و Author، به صورت غیرنالپذیر تعریف شدهاند (و همانند Subtitle نالپذیر نیستند)؛ اما تعریف این کلاس به نحوی است که این مساله را الزامی نمیکند. یعنی میتوان نمونهای از Article1 را ایجاد کرد که در, ...ادامه مطلب
نرم افزار اندروید Google Allo یک پیام رسان هوشمند است که به شما کمک می کند بیشتر با دیگران صحبت کنید و در ارتباط باشید. با این مسنجر می توانید احساسات خود را با استی, ...ادامه مطلب
دانلود کلش رویال 2.7.1 جدیدترین نسخه Clash Royale اندروید – iOS – کامپیوتر - بدوگیم - مرجع کلش اف کلنز - کلش رویال خانهعمومیدانلود کلش رویال 2.7.1 جدیدترین نسخه Clash Royale اندروید, ...ادامه مطلب
دانلود جدیدترین ورژن ربات کلش هماهنگ با نسخه 11.185.14 کلش اف کلنز Clash of clans خانه دانلود دانلود جدیدترین ورژن ربات کلش هماهنگ با نسخه11.185.14 کلش ?> , ...ادامه مطلب
دانلود, جدیدترین, ورژن, ربات, کلش هماهنگ, با نسخه, 11.185.11 کلش اف کلنز Clash of clans خانه دانلود دانلود جدیدترین ورژن ربات کلش هماهنگ با نسخه11.185.12 کلش ?> , ...ادامه مطلب
دانلود, کلش رویال, 2.5.1 جدیدترین, نسخه, Clash Royale اندروید, – iOS – کامپیوتر, - بدوگیم - مرجع کلش اف کلنز - کلش رویال خانه عمومی دانلود کلش رویال 2.5.1 جدیدترین نسخه Clash Royale اندروید – iOS – , ...ادامه مطلب
بوک مارکهمانطور که انتظار می رفت تقریباً تمامی نیروهای کلش اف کلنز در آپدیت جدید تاون هال 12 دارای لول (LEVEL) جدید خواهند بود! تغییرات این نیروها چه از نظر گرافیکی و چه از نظر قدرت در سطح بسیار بالاییست.در این مطلب به توضیح مفصل جزییات لول جدید نیروها و قهرمان ها خواهیم پرداخت بنابراین ممکن است مطلب کمی طولانی شود!، این نیروهای لول جدید میبایست با دیوارهای , ...ادامه مطلب
بوک مارکبالاخره پس از یک هفته پرماجرا ، دقایقی قبل هشتمین و آخرین پیشنمایش آپدیت تاون هال 12 منتشر شد که به گفته سوپرسل همان سوپرایزی است که برای آخر نگه داشته شده بود! دراگون الکتریکی یا الکترو دراگون نیروی جدید کلش اف کلنز است که تنها چند دقیقه پس از معرفی ، قویترین نیروی کلش اف کلنز نام گرفت! اما چرا؟! در این مطلب به تشریح و برسی همه چیز درباره نیرو جدید , ...ادامه مطلب
دانلود کلش رویال 2.2.2 جدیدترین نسخه Clash Royale اندروید – iOS – کامپیوتر - بدوگیم - مرجع کلش اف کلنز - کلش رویال خانهعمومیدانلود کلش رویال 2.2.2 جدیدترین نسخه Clash Royale اندروید – iOS – کامپیوتر ?>, ...ادامه مطلب