علیرغم اینکه در Program.cs یا Startup.cs کد زیر وجود دارد، اما بازهم استثناءها در Blazor Server در قالب یک نوار زرد رنگ، پایین مرورگر نشان داده میشوند؛ حال در محیط توسعه باشد و یا در محیط تولید و پابلیش نهایی محصول! if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
else
{
app.UseExceptionHandler("/Error");
...
فرض کنید کدی مانند زیر را در یک کامپوننت داریم و انتظار این است که با کلیک بر روی Section2، به بخش مورد نظر اسکرول شویم: @page "/test"
<nav>
<!-- یک روش -->
<a href="#section2">Section2</a>
<!-- روش دیگر -->
<NavLink href="#section2">Section2</NavLink>
</nav>
@* ... *@
<h2 id="section2">It's Section2.</h2>
@* ... *@
اما ...
در برنامههای Blazor Server، تنها از یک نخ رابط کاربری واحد ( single UI thread ) استفاده نمیشود؛ بلکه هر نخی که در دسترس باشد، میتواند در موقع رندر، استفاده شود. علاوه بر این اگر از عملیات نامتقارن استفاده شود، زمانیکه به کلمهی کلیدی await میرسیم، آنگاه نخ اختصاص داده شدهی برای ادامه پردازش متد، ممکن است لزوما همان چیزی نباشد که آن را شروع کرده است. برای نشان دادن این موضوع مثالی را در پیش میگیریم.
کامپوننتی را با نام Sync ...
همه ما با DisplayAttribute در DataAnnotaion آشنا هستیم. چیزی شبیه زیر برای یک موجودیت: public class Student{
[Display(Name="نام خانوادگی")]
public string FamilyName { get; set;}
} با استفاده از tag helper ای به نام asp-for میتوان متادیتای Name را به کاربر، در سمت رابط کاربری نشان داد؛ برای مثال: <label asp-for="FamilyName"></label> و یا موقع اعتبارسنجی میتوان به جای نشان دادن نام FamilyName ا ...
فرض کنید میخواهید برای یک پروژه، امکانی را درنظر بگیرید که بتوان برای تمامی رکوردهای موجودیتهای (Entity) آن پروژه، زمان ساخته شدن و به روزرسانی، به صورت خودکار ثبت شود. کار با تعریف یک کلاس پایه به شکل زیر شروع میشود: public class BaseEntity
{
public DateTimeOffset CreatedDate { get; set; }
public DateTimeOffset UpdatedDate { get; set; }
} سپس برای اینکه کار مقداردهی، به صورت خودکار انجام گیرد، ...
اینطور که در این مطلب عنوان شده، ماوسهای قدیمی در اثر مشکلات سخت افزاری، میتوانند بهازای هر کلیک کاربر، دو سیگنال کلیک، ظرف مدت کوتاهی (برای مثال 5 میلی ثانیه) تولید کنند. برنامههای مبتنی بر Blazor، توسط متدهای نامتقارن میتوانند هردوی این سیگنالها را دریافت کرده و بنابراین متد مربوطه در کسری از ثانیه دوبار اجرا خواهد شد. برای رهایی از این مشکل میتوان از کدی شبیه زیر بهره جست: <button disabled="@_busy" Value="do-stuff" /& ...
در Asp.net core توسط IHttpContextAccessor میتوان بهراحتی به HttpContext در هرجای برنامه دسترسی داشت و اطلاعات مورد نیاز را از قبیل نام کاربری، کوکیها، توکنها و ... به دست آورد. اما در Blazor Server برای استفاده از این قبیل اطلاعات توصیه شدهاست که اکیدا از IHttpContextAccessor در هرجایی از برنامه استفاده نشود؛ زیرا هیچ تضمینی وجود ندارد که در حالتهای مختلف، مقدار HttpContext معتبر باشد. برای کسب اطلاعات بیشتر در این باب میتوانید ب ...
مقدمه
همانطور که میدانید، Blazor دارای یک سیستم لاگ گیری توکار است که میتوان از آن توسط تزریق ILogger در کامپوننتها بهره برد. این سیستم لاگ گیری در زمان توسعهی نرم افزار، در قالب یک کنسول، لاگها را به توسعه دهنده نشان میدهد. اما پس از تولید و پابلیش اپلیکیشن، دیگر این کنسول وجود ندارد. برای ذخیرهی لاگها در یک فایل متنی بر روی سرور هاست، میتوان از Serilog بهره برد که روش ...
در قسمت اول دیدیم که توسط Error boundary میتوان استثناءها را در Blazor مدیریت کرد؛ اما اگر بخواهیم قدری سفارشیتر عمل کرده و علاوه بر نمایش پیغام خطای مناسب به صورت جاوا اسکریپتی ، استثنای رخ داده را لاگ کنیم چطور؟ خبر خوب اینکه این مهم نیز به راحتی امکان پذیر است؛ با استفاده از مفهوم CascadingValue ها. یک کامپوننت Error.razor به شکل زیر ایجاد میکنیم: @using Microsoft.Extensions.Logging
@inject ILogger<Error> Logger
...
همانطور که میدانید Blazor Server یک فریم ورک stateful است. هنگامیکه کاربران در حال تعامل با برنامه هستند، یک ارتباط پیوسته را با سرور حفظ میکنند که به آن، به اصطلاح مدار میگویند. این مدارها، کامپوننتهای فعال را به انضمام حالتهای آنها که شامل موارد زیر است نگهداری میکند: 1- جدیدترین خروجی رندر شدهی کامپوننت. 2- مجموعه Event Handlingهای جاری که میتوانند توسط کاربر صدا زده شوند. اگر کاربری یک برنامه را در چندین تب مرورگر باز کند، ...