استفاده از Silent Validation در ASP.Net

در این مقاله نحوه پیاده سازی Validation در ASP.Net را شرح می دهیم.

استفاده از Silent Validation در ASP.Net

Validation(اعتبار سنجی) در ASP.Net بسیار مفید است و این امکان را به برنامه نویسان می دهد که قبل از ذخیره اطلاعات از درست بودن داده ها اطمینان پیدا کنند. اعتبار سنجی می تواند در سمت کاربر و یا در سمت سرور اجرا شود که هرکدام مزایا و معایب خود را دارند.

اعتبار سنجی در MVC و Webforms کمی متفاوت است و در این مقاله این تفاوت ها توضیح داده نمی شود. در این مقاله، قصد داریم بهترین شیوه ها و پیشنهادات را برای بهتر پیاده سازی کردن Validation توضیح دهیم .

اتصال اعتبارسنجی به عناصر HTML:

برای پیاده سازی اعتبارسنجی، ابتدا یک المنت HTML به صفحه اضافه می کنیم، سپس یک عنصر اعتبارسنجی به المنت HTML اشاره می کند. در MVC، کدی مشابه کد زیر برای فیلدی به نام Name در مدل می نویسیم.

<div class="editor-field col-md-10">  
    <div class="col-md-6">  
        @Html.TextBoxFor(model => model.Name, new { @class = "form-control" })  
    </div>  
    <div class="col-md-6">  
        @Html.ValidationMessageFor(model => model.Name)  
    </div>  
</div> اا

این کد ها در Webform به شکل زیر نوشته می شوند:

<asp:DropDownList ID="Name" runat="server" AutoPostBack="true" FriendlyName="Option:"  
AddBlankRowToList="false" DisplayBlankRowText="False" CausesValidation="true">  
<asp:ListItem Text="Option 1" Value="1"></asp:ListItem>  
<asp:ListItem Selected="True" Text="Option 2" Value="2"></asp:ListItem>  
</asp:DropDownList>  
<asp:CustomValidator ID="valCheck" ControlToValidate="Name" Display="Static" runat="server" ForeColor="red"  
ErrorMessage="Validation Error Message" SetFocusOnError="True"  
OnServerValidate="CheckForAccess" />  

این کد در المنت های HTML، با صفاتی که امکان اجرای framework اعتبار سنجی در سمت کاربر را می دهند، نتیجه می دهد.

بررسی خطاهای اعتبارسنجی در Postback

درحالی که اعتبارسنجی باید قبل از ارسال فرم به سرور، در سمت کاربر اجرا شود، با این حال شیوه خوبی برای چک کردن خطاهای سرور می باشد. دلایل بسیاری برای رخ دادن این خطاها وجود دارد، اما مهم ترین دلیل این است که تعداد کاربران مشخص نیست. مرورگرهای گوناگونی وجود دارد یا اینکه JavaScript غیر فعال می باشد، ابزارهای برنامه نویسی امکان تغییر HTML را به کاربر می دهد از این رو ممکن است نتایج یک داده ناخواسته، ارسال شود. بنابراین، پیش از پردازش داده های فرم خود روی سرور، معتبر بودن آنها را چک کنید. و این به سادگی بسته بندی منطق سمت سرور خود در یک بلاک کد است.

MVC

[HttpPost]  
[ValidateAntiForgeryToken]  
public ActionResult Edit(ViewModel model)  
{  
    if (ModelState.IsValid())  
    {  
        // your code to process the form  
    }   
    else  
    {  
        ModelState.AddModelError(String.Empty, "Meaningful Error message);  
        return View(model);  
    }  
    return RedirectToAction("Index");  
}  

Webforms

protected void Page_Load(object sender, EventArgs e)  
{  
    if (IsPostback)  
    {  
        if (!IsValid)  
        {  
            // validation failed. Do something  
            return;  
        }  
          
        // do your form processing here because validation is valid  
    }   
    else   
    {  
        // non-postback  
    }  
}  

برای رفع خطاهای اعتبارسنجی کارهای مفید زیر را می توانید انجام دهید. 

اگر از طریق سرور خود، خطای اعتبارسنجی بیابید نیاز به گرفتن این خطا ها و نشان دادن آن ها به کاربر دارید. یک راه سریع پیدا کردن این خطاها قرار دادن آن ها در یک حلقه با استفاده از validator collection می باشد. برخی از کارهایی که شما می توانید انجام دهید این است، که یک پیغام خطا با متن خلاصه ای در فرم اعتبار سنجی خود اضافه کنید، در یک audit log بنویسید یا آن را در یک dialog box نشان دهیم.

foreach (IValidator aValidator in this.Validators)  
{  
    if (!aValidator.IsValid)  
    {  
        Response.Write("<br />" + aValidator.ErrorMessage);  
    }  
}