با توجه به امکانات جدید Razor Components، آیا در آینده از SPA frameworks استفاده میکنید؟
4.Visual Studio 2017 15.7 منتشر شد
These are the customer-reported issues addressed in 15.7.4:
- Green squiggles and light bulb with "Macro in skipped region" message.
- F7 does not switch to code.
- F7 does not build anymore.
- F7 build does not work.
- LINK : error : Telemetry event upload failed: 'Failed to open connection to VCTIP'.
- AXML file doesn't open after update.
- F7 no longer toggles between the designer and the code.
- XAML Editor Error: Window is not supported in WPF project.
- WinForms View.ToggleDesigner does not work as it used to.
- Toggle designer key binding lost.
- F7 does not start a new build.
- F7 no longer toggles between Designer and Code views.
- There is a problem with structure definition in C language.
- Provisioning a new SQL Server and new SQL DB in a different region than the App Service plan fails.
Git Security Vulnerability
We also fixed a security vulnerability in Git that was disclosed by the Git community. The vulnerability can lead to arbitrary code execution when a user clones a malicious repository. This blog post has more information.
Learn .NET MAUI while Creating a Contacts App in .NET 7 - YouTube
00:00:00 Introduction
00:02:54 What is .NET MAUI
00:06:13 Prepare Development Environment & Create first project.
00:11:50 Project Structure of .Net Maui
00:19:49 Three elements of stateful .Net Maui app
00:23:12 Page, Layout & View, Namespaces
00:32:23 URL based navigation - .Net Maui
00:50:31 Basics of ListView and Data Binding in .Net Maui
01:05:19 Events Handling of ListView in .Net Maui
01:16:15 Parameters in URL based Navigation & Static Repository in .Net Maui
01:34:56 Stacklayout for Edit Contact page in .Net Maui
01:52:08 View Contact Details & Update Contact (.Net Maui)
02:06:01 Observable Collection
02:14:19 Field Validation with .Net Maui CommunityToolkit
02:26:18 Reusable Control in .Net Maui
02:39:42 Grid Layout and Use reusable control in .Net Maui
02:52:44 ContextActions & MenuItems in ListView for .Net Maui
03:03:05 SearchBar in .NetMaui
اگر ویژگیهای پیشفرض مهیا، پاسخگوی اعتبارسنجی مدنظر نبودند، میتوان یک attribute سفارشی را تهیه کرد:
using System.ComponentModel.DataAnnotations; namespace CustomValidators { [AttributeUsage(AttributeTargets.Field | AttributeTargets.Property | AttributeTargets.Parameter)] public class EmailDomainValidator : ValidationAttribute { public string AllowedDomain { get; set; } protected override ValidationResult IsValid(object value, ValidationContext validationContext) { string[] strings = value.ToString().Split('@'); if (strings[1].ToUpper() == AllowedDomain.ToUpper()) { return null; } return new ValidationResult($"Domain must be {AllowedDomain}", new[] { validationContext.MemberName }); } } }
- کار با ارث بری از کلاس پایهی ValidationAttribute شروع میشود و باید متد IsValid آنرا بازنویسی کرد.
- اگر متد IsValid، نال برگرداند، یعنی مشکلی نیست؛ در غیراینصورت خروجی آن باید از نوع ValidationResult باشد.
- پارامتر validationContext اطلاعاتی مانند نام خاصیت در حال بررسی را ارائه میدهد.
- در اینجا متد ()ValidationContext.GetService نال را بر میگرداند؛ یعنی فعلا از تزریق وابستگیها در آن پشتیبانی نمیشود.
و در آخر روش استفادهی از آن، همانند سایر ویژگیهای اعتبارسنجی است:
public class Employee { [EmailDomainValidator(AllowedDomain = "site.com")] public string Email { get; set; } }
دوره مقدماتی React 18
معرفی Rivets.js
جواب کوتاه:بله.
جواب بلند: ما مدت زیادی است که با Blazor کار میکنیم و چند ماه پیش تصمیم گرفتیم که شروع به ایجاد یک پروژه منبع باز به نام FairPlayTube کنیم که در Blazor WebAssembly اجرا میشود تا قابلیتهای فناوری را نشان دهیم، میتوانید کد را در اینجا بررسی کنید: FairPlayTube
Blazor سرعت توسعه را بهینه میکند و وضعیت توسعه شما را از این رو به اون رو میکند، به کاهش قابل توجه کدهای تکراری و ناسازگاری بین مدلهای front-end و api/backend کمک میکند و بنابراین به نوبه خود به کاهش باگها و در نتیجه هزینههای توسعه کمک میکند.
بررسی تغییرات Blazor 8x - قسمت دوازدهم - قالب جدید پیاده سازی اعتبارسنجی و احراز هویت - بخش دوم
[Parameter, EditorRequired] public string Title { get; set; }