ModelState و بررسی صحت اطلاعات در MVC

ModelState و بررسی صحت اطلاعات در MVC

بسم الله الرحمن الرحیم

ModelState و بررسی صحت اطلاعات در MVC

اعتبارسنجی اطلاعات در asp.net mvc

ممکن است در برنامه خود نیاز داشته باشید اطلاعات کاربر را در Controller بررسی کنید و پیام مناسبی به کاربر خود نمایش دهید.

یکی از روش هایی که می توانید به وسیله آن صحبت اطلاعات ارسالی را در سمت Server بررسی نمایید و پیام مناسب به کاربر نمایش دهید استفاده از همان ModelState است.

طبیعتا همه شما با دستور زیر آشنا هستید:

if (ModelState.IsValid)
{
/**do something*/
}

این دستوری است که در تمامی Action های [HttpPost]  نوشته می شود تا اطلاعات ارسالی کاربر بررسی گردد و در صورتی که تمامی اطلاعات به صورت صحیح به سرور ارسال شده اند، عملیات مورد نظر انجام شود.

فکر می کنید می خواهید فایلی را از کاربر دریافت و بر روی سرور قرار دهید پس دریافت فایل مشاهده می کنید که چنین فایلی بر روی سرور وجود دارد و می خواهید به کاربر اطلاع دهید تا یا نام فایل خود را تغییر دهد و یا گزینه Replace را انتخاب کنید.

یکی از روش های پیشنهادی بررسی صحت اطلاعات در سمت سرور استفاده از دستور زیر است

 ModelState.AddModelError("", "Error in persisting Data");

با استفاده از این دستور شما می توانید ابتدا تمامی موارد مورد نیاز خود را در Action مربوطه بررسی کنید. این دستور با اضافه کرن خطا به ModelState باعث می شود تا فرایند شما انجام نشود مثال:

if(fileName.Name == "test.jpg")
ModelState.AddModelError("file1", "The file is already exists! ");

if (ModelState.IsValid)
{
/**do something*/
}

در دستور بالا اگر نام فایل انتخاب شده کاربر test.jpg باشد خطایی به ModelState اضافه می شود در نتیجه ModelState.IsValid برابر false خواهد شد و عملیات اجرا نمی شود.

این روش کد نویسی باعث می شود تا از دستورات if تو در تو جلوگیری شود.

بسم الله الرحمن الرحیم

ModelState و بررسی صحت اطلاعات در MVC

اعتبارسنجی اطلاعات در asp.net mvc

ممکن است در برنامه خود نیاز داشته باشید اطلاعات کاربر را در Controller بررسی کنید و پیام مناسبی به کاربر خود نمایش دهید.

یکی از روش هایی که می توانید به وسیله آن صحبت اطلاعات ارسالی را در سمت Server بررسی نمایید و پیام مناسب به کاربر نمایش دهید استفاده از همان ModelState است.

طبیعتا همه شما با دستور زیر آشنا هستید:

if (ModelState.IsValid)
{
/**do something*/
}

این دستوری است که در تمامی Action های [HttpPost]  نوشته می شود تا اطلاعات ارسالی کاربر بررسی گردد و در صورتی که تمامی اطلاعات به صورت صحیح به سرور ارسال شده اند، عملیات مورد نظر انجام شود.

فکر می کنید می خواهید فایلی را از کاربر دریافت و بر روی سرور قرار دهید پس دریافت فایل مشاهده می کنید که چنین فایلی بر روی سرور وجود دارد و می خواهید به کاربر اطلاع دهید تا یا نام فایل خود را تغییر دهد و یا گزینه Replace را انتخاب کنید.

یکی از روش های پیشنهادی بررسی صحت اطلاعات در سمت سرور استفاده از دستور زیر است

 ModelState.AddModelError("", "Error in persisting Data");

با استفاده از این دستور شما می توانید ابتدا تمامی موارد مورد نیاز خود را در Action مربوطه بررسی کنید. این دستور با اضافه کرن خطا به ModelState باعث می شود تا فرایند شما انجام نشود مثال:

if(fileName.Name == "test.jpg")
ModelState.AddModelError("file1", "The file is already exists! ");

if (ModelState.IsValid)
{
/**do something*/
}

در دستور بالا اگر نام فایل انتخاب شده کاربر test.jpg باشد خطایی به ModelState اضافه می شود در نتیجه ModelState.IsValid برابر false خواهد شد و عملیات اجرا نمی شود.

این روش کد نویسی باعث می شود تا از دستورات if تو در تو جلوگیری شود.

حال می بایست شما این خطاها را به کاربر نشان دهید.

در پارامتر اول دستور ModelState.AddModelError شما می توانید نام کنترلی را که میخواهید پیغام خطا برای آن نمایش داده شود مشخص کنید و در پارامتر دوم متن خطا قابل تعیین است.

اگر بخواهیم خطای نوشته شده در مثال بالا را نمایش دهیم باید برای کنترل فایل آپلود خود یک Html.ValidationMessage@ اضافه کنید. مثال

@Html.ValidationMessage("file1")

در بسیاری از مواقع برنامه به سادگی این مثال نیست زیرا شما نیاز دارید موارد زیادی را بررسی کنید و خطاها و پیام های مربوطه را به کاربر نمایش دهید.

به همین می بایست تمام خطاهایی که در Html.ValidationMessage@ ثبت شده است را بازیابی کنید و سپس نمایش دهید. برای این منظور می توانید از کد زیر استفاده کنید:

@{
if (ViewData.ModelState.Values.Count() > 0)
{
<ul>
  @foreach (ModelState modelState in ViewData.ModelState.Values)
    {
        foreach (ModelError error in modelState.Errors)
          {
           <li style="list-style-type:decimal-leading-zero">@error.ErrorMessage</li>
          }
    }
</ul>
}
}

در خط ابتدایی، بررسی می کنیم که ایا اصلا خطایی برای نمایش وجود دارد و یا خیر و سپس در صورتی که خطایی برای نمایش وجود داشته باشد دستورات پس از آن اجرا خواهند شد.

در صورتی که به تمامی ModelState.AddModelError یک کلید (Key) بدهید (منظور از Key پارامتر اول ModelState.AddModelError می باشد) مثلا اگر به صورت زیر عمل کنیم:

ModelState.AddModelError("CustomError", "Error 1");
ModelState.AddModelError("CustomError", "Error 2");
ModelState.AddModelError("CustomError", "Error 3");

می توانیم تمامی خطاها را به روش زیر نیز نمایش دهیم:

@Html.ValidationSummary(true)
@Html.ValidationMessage("CustomError")

همچنین می توانید برای نمایش خطای مربوط به هر کنترل در زیر آن به صورت زیر اقدام کنید:

@Html.TextBoxFor(model => model.FirstName) 
@if (ViewData.ModelState.ContainsKey("FirstName"))
{
@Html.ValidationMessageFor(model => model.FirstName)
<br />
}

نظرات

  • Hannah Martinez
    ابراهیم
    دو شنبه 11 دی 1278 - 0:00

    دستتون واقعا درد نکنه.

    بسیار بسیار ممنون.

    • Judith Bell
      پاسخ
      اسماعیلشیدایی
      دو شنبه 11 دی 1278 - 0:00

      با عرض سلام
      انشالله که این مطالب بتوانند به شما کمک کنند
      موفق باشید

نظرات یا سوالات خودرا با ما درمیان بگذارید

0912 097 5516 :شماره تماس
0713 625 1757 :شماره تماس