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 />
}
ابراهیم
دستتون واقعا درد نکنه.
اسماعیلشیدایی
با عرض سلام
انشالله که این مطالب بتوانند به شما کمک کنند
موفق باشید