نظرات مطالب
EF Code First #4
سلام من هر کاری میکنم نمیتونم مشکلم حل کنم این خطا رو میده دوباره نصب کردم باز این خطا رو میده اگه می‌تونید یه کمکی بکیند
The parameter is incorrect. (Exception from HRESULT: 0x80070057 (E_INVALIDARG)) 
بازخوردهای پروژه‌ها
تغییر نام یک فایل
با سلام مجدد
در هنگام تغییر نام فایل در قسمتی که مسیر فایل نمایش داده شده هنگامی که بر روی نام فایل کلیک می‌کنیم یه خطای کنترل نشده نمایش داده می‌شود

 The filename, directory name, or volume label syntax is incorrect.
لطفا بررسی فرمایید
تشکر
بازخوردهای پروژه‌ها
نمایش برعکس ستون‌های عددی
در ستون‌های عددی که برای نمایش ابعاد از * بین آن‌ها استفاده می‌شود مقدار آن به صورت راست به چپ نمایش داده می‌شود، در صورتی که نمایش صحیح مورد انتظار به صورت چپ به راست است.
Correct: 366*183
Incorrect: 183*366
نحوه نمایش ستون به LTR هم تغییر داده شده ولی در نتیجه نهایی تاثیری نداشت.
این مورد به چه صورت قابل حل است؟
نظرات مطالب
LocalDB FAQ
روش ارتقاء وهله‌ی پیش فرض MSSQLLocalDB به نگارش‌های جدید آن

پس از نصب بسته‌ی فوق اگر دستور ذیل را صادر کنید:
 C:\Program Files\Microsoft SQL Server\140\LocalDB\Binn>sqllocaldb info MSSQLLocalDB
هنوز اطلاعات نگارش قبلی نصب شده (نگارش 2016) را نمایش می‌دهد:
 Name: MSSQLLocalDB
Version: 13.1.4202.2

برای ارتقاء به نگارش جدید نیاز است این مراحل طی شوند:
الف) حذف وهله‌ی موجود
 C:\Program Files\Microsoft SQL Server\140\LocalDB\Binn>sqllocaldb delete MSSQLLocalDB
LocalDB instance "MSSQLLocalDB" deleted.
ب) ایجاد مجدد وهله‌ی موجود
 C:\Program Files\Microsoft SQL Server\140\LocalDB\Binn>sqllocaldb create MSSQLLocalDB
LocalDB instance "MSSQLLocalDB" created with version 14.0.1000.169.
ج) بررسی نگارش نصب شده
 C:\Program Files\Microsoft SQL Server\140\LocalDB\Binn>sqllocaldb info MSSQLLocalDB
Name: MSSQLLocalDB
Version: 14.0.1000.169
که در اینجا نگارش 14.0.1000.169 به نگارش LocalDB 2017 RTM اشاره می‌کند.
نظرات مطالب
مفهوم READ_COMMITTED_SNAPSHOT در EF 6
بحث اصلی هم همین نحوه و محل ذخیره سازی snapshot است.
- Sanpshot مطابق واژه نامه مایکروسافت معنای «نگارش» را می‌دهد. در این حالت کلیه کوئری‌های داخل یک تراکنش، یک نگارش یا snapshot از دیتابیس را مشاهده خواهند کرد. این نگارش یا Row version، در tempdb نگه داری می‌شود. با فعال سازی SNAPSHOT isolation، هر زمانیکه یک ردیف به روز رسانی می‌شود، موتور SQL Server یک نسخه از اطلاعات اولیه این ردیف را در tempdb ذخیره می‌کند (اینجا بود که عنوان شد با یک کپی فقط خواندنی از اطلاعات در حین واکشی اطلاعات سر و کار خواهید داشت).
خلاصه الگوریتم کاری آن :
الف) با آغاز یک تراکنش، یک عدد متوالی منحصربفرد تراکنش (شماره نگارش) ایجاد شده و به آن نسبت داده می‌شود.
ب) در حین این تراکنش، موتور SQL Server، به tempdb مراجعه کرده و شماره نگارشی نزدیک و کمتر از شماره نگارش تراکنش جاری را پیدا می‌کند. همچنین SQL Server بررسی می‌کند که این شماره یافت شده حتما جزو تراکنش‌های پایان یافته سیستم باشد.
ج) بر اساس این شماره یافت شده، نگارش معتبری از اطلاعات از tempdb استخراج می‌شود.
به این ترتیب یک تراکنش، کلیه اطلاعات موجود در ابتدای کار خود را بدون قرار دادن قفلی بر روی جداول مرتبط، دریافت خواهد کرد.
اطلاعات بیشتر

- در متن ذکر گردید که از SQL Server 2005 به بعد قابلیت فوق اضافه شده.
- همچنین SQL Server 2000 دیگر پشتیبانی رسمی ندارد و استفاده از آن حداقل از لحاظ امنیتی معقول نیست.
نظرات مطالب
Blazor 5x - قسمت یازدهم - مبانی Blazor - بخش 8 - کار با جاوا اسکریپت
تکمیل JavaScript Isolation در Blazor 6x

همانطور که کمی بالاتر نیز عنوان شد، CSS Isolation جزئی از تازه‌های Blazor 5x بود؛ اکنون مشابه این قابلیت جهت فایل‌های js. به Blazor 6x هم اضافه شده‌است و روش کار با آن نیز همانند CSS Isolation است (البته این قابلیت از نگارش 5 هم وجود داشت؛ اما اینبار دیگر نیازی به تعریف فایل ماژول آن در wwwroot نیست). یعنی اگر کامپوننت ما در مسیر Pages/Panel.razor قرار داشته باشد، می‌توان برای این تک فایل، فایل js. متناظری را به نام Pages/Panel.razor.js تعریف کرد؛ با الگوی Component>.razor.js>. سپس اگر محتوی این فایل js. به صورت زیر باشد:
export function error(){
    alert('oops, an error');
}
روش فراخوانی آن در همان کامپوننت به صورت زیر خواهد بود (یعنی در اصل دیگر مهم نیست که این فایل js. کجا قرار می‌گیرد، هنگام publish به خروجی کپی خواهد شد):
var module = await JS.InvokeAsync<IJSObjectReference>("import", "./Panel.razor.js");
await module.InvokeVoidAsync("error");
مزیت اینکار، نزدیک نگه داشتن static assets یک کامپوننت، در کنار آن است و به این ترتیب قابل درک‌تر کردن برنامه:
Pages/Panel.razor
Pages/Panel.razor.js
Pages/Panel.razor.css
به علاوه JS Isolation دو مزیت دیگر را هم به همراه دارد:
- دیگر نیازی به تعریف توابع و متدهای جاوا اسکریپتی در global namespace نیست (این متدها و اشیاء، به شیء سراسری window اضافه نمی‌شوند). Isolation در اینجا در اصل به معنای امکان استفاده‌ی از JavaScript modules است.
- استفاده کنندگان از پروژه‌های کتابخانه‌ای دیگر نیازی به الحاق دستی این فایل‌ها ندارند. منظور از الحاق دستی یا ذکر src تگ script اضافه شده به index.html، در مطلب تولید کتابخانه‌های Razor توضیح داده شده‌است و از الگوی content/{PACKAGE ID}/{SCRIPT PATH AND FILENAME (.js)}_/. جهت مشخص سازی نام نهایی فایل js. به همراه کتابخانه، پیروی می‌کند. البته اگر نیاز است این نوع فایل‌ها در کتابخانه‌ها مستقیما استفاده شوند، باید مسیر فوق در کدها حتما ذکر شود:
_module = await JS.InvokeAsync<IJSObjectReference>("import", "./_content/RazorClassLibrary/componentName.razor.js");

یک نکته: روش صحیح کار با ماژول‌ها همانطور که در نکات فوق نیز بررسی شد، به صورت زیر است و باید در OnAfterRenderAsync شروع شده و سپس در آخر کار Dispose شوند:
export function showPrompt(message) {
  return prompt(message, 'Type anything here');
}

@page "/call-js-example-6"
@implements IAsyncDisposable
@inject IJSRuntime JS

<h1>Call JS Example 6</h1>

<p>
    <button @onclick="TriggerPrompt">Trigger browser window prompt</button>
</p>

<p>
    @result
</p>

@code {
    private IJSObjectReference? module;
    private string? result;

    protected override async Task OnAfterRenderAsync(bool firstRender)
    {
        if (firstRender)
        {
            module = await JS.InvokeAsync<IJSObjectReference>("import", 
                "./scripts.js");
        }
    }

    private async Task TriggerPrompt()
    {
        result = await Prompt("Provide some text");
    }

    public async ValueTask<string?> Prompt(string message) =>
        module is not null ? 
            await module.InvokeAsync<string>("showPrompt", message) : null;

    async ValueTask IAsyncDisposable.DisposeAsync()
    {
        if (module is not null)
        {
            await module.DisposeAsync();
        }
    }
}
نظرات مطالب
ReSharper 4.5
مطابق اصول استاندارد برنامه نویسی به زبان سی شارپ:
18. Declare variables as close as possible to where it is first used. Use one variable declaration per line.
ماخذ:
http://www.dotnetspider.com/tutorials/CodingStandards.doc
نظرات مطالب
فعال سازی عملیات CRUD در Kendo UI Grid
- جزئیات خطای عمومی Internal Server Error را در برگه‌ی response فایرباگ می‌توانید مشاهده کنید. اطلاعات بیشتر
- همچنین ELMAH را هم می‌توانید نصب کنید تا خطاها را بهتر بتوانید بررسی کنید.
- کدهای مثال جاری را بازنویسی شده جهت ASP.NET MVC و بدون استفاده از Web API در اینجا می‌توانید مشاهده کنید. با این View و این Controller. کدهای سمت کلاینت و سمت سرور خودتان را با این دو فایل انطباق دهید.
- name، نام یک سری command و دستور از پیش تعریف شده‌ی Kendo UI Grid است.
نظرات مطالب
ASP.NET MVC #16
با سلام و تشکر از مطالب شما
1) ELMAH با Elmah.MVC فرقی دارد؟ آیا برای پروژه‌های ASP.Net MVC بهتر است از Elmah.MVC استفاده شود یا فرقی نمیکند.
2) در حالتی که پروژه  عمومی نیست مثل سیستم حسابداری، آیا بهتر است مسیر http://localhost/elmah.axd پس از لاگین قابل مشاهده باشد یا پیشنهاد نمیکنید.
<location path="elmah.axd">
    <system.web>
        <authorization>
            <allow roles="Admin" />
            <deny users="*" />
        </authorization>
    </system.web>
</location>
ممنون
نظرات مطالب
ASP.NET MVC #18
ممنون. روش خوبیه. پیشنهاد من این است که بجای 403 از روش زیر استفاده شود:
using System;
using System.Web.Mvc;

namespace SecurityModule
{
    [AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, Inherited = true, AllowMultiple = true)]
    public class SiteAuthorizeAttribute : AuthorizeAttribute
    {
        protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
        {
            if (filterContext.HttpContext.Request.IsAuthenticated)
            {
                throw new UnauthorizedAccessException(); //to avoid multiple redirects
            }
            else
            {
                base.HandleUnauthorizedRequest(filterContext);
            }
        }
    }
}
به این ترتیب ریز جزئیات سعی در دسترسی غیرمجاز، توسط ELMAH ثبت خواهد شد.