جلوگیری از ثبت داده تکراری در Mvc 5
سه شنبه 5 خرداد 1394در این مقاله میخواهیم بررسی کنیم که چگونه میتوان در Mv5 از وارد کردن رکورد تکراری جلوگیری کنیم در برنامه ها واقعی وقتی امکان ثبت نام در سایت خود میگذارید باید بررسی کنید که یک فرد با یک نام یا یک ایمیل دو بار ثبت نام نکند و و قتی که یک کاربر با یک نام کاربری در سایت شما ثبت نام کرد بایستی این نام در بانک اطلاعاتی شما دخیره بشود و اگر کاربر با نام کاربری تکراری ثبت نام کرد بایستی یک پیغام خطا به کاربر نشان دهیم که این نام کاربری قبلا در سایت وجود دارد
سلام دوستان
در این مقاله میخواهیم بررسی کنیم که چگونه میتوان در Mv5 از وارد کردن رکورد تکراری جلوگیری کنیم
در برنامه ها واقعی وقتی امکان ثبت نام در سایت خود میگذارید باید بررسی کنید که یک فرد با یک نام یا یک ایمیل دو بار ثبت نام نکند و و قتی که یک کاربر با یک نام کاربری در سایت شما ثبت نام کرد بایستی این نام در بانک اطلاعاتی شما دخیره بشود و اگر کاربر با نام کاربری تکراری ثبت نام کرد بایستی یک پیغام خطا به کاربر نشان دهیم که این نام کاربری قبلا در سایت وجود دارد
دوستان دیگه توضیح کافی است حالا بریم سراغ کد نویسی :
ما در این برنامه قصد داریم از روش Database First استفاده کینم پس ابتدا در بانک اطلاعاتی یک دیتابیس با نام "db_UniqueUserName" ایجاد مکنیم حالا یک جدول با نام tblUser میسازیم
مرحله 2:
حالا ویژوال استادیو را باز میکنیم و یک پروژه از نوع MVC 5 web application ایجاد میکنیم
مرحله 3:
پروژه را از نوع Emptyایجاد میکنیم و نوع ان را از نوع Mvc میگذاریم
حالا در این مرحله می آییم بانک اطلاعاتی خود را به برنامه اضافه کنیم
همان طور که از شکل معلوم است ما میخواهیم از EntityFromWork استفاده کنیم برای این کار روی پروژه راست کلیک کرده و ADO.Net Entity Data را میزنیم
حالا بایستی یک اسم برای مدل خود انتخاب کنید
حال کزینه EF Designer from database. انتخاب میکنیم
حالا Next را میزنیم یک صفحه جدید دیگر باز میشودکه در Server Name: اسم بانک اطلاعاتی را میزنیم که اینجا چون همگی از sql server استفاده میکینیم و این نرم افزار روی سیستم ما است بهتر است که "." را بزنیم ( (دات) به این معناست که من به بانک اطلاعاتی روی دستگاه خودم وصل شدم ) البته به جای دات هم میشه از ادرس شبکه استفاه کرد ولی بهتر است که از همان دات استفاده کنیم.
در باکس log on to server
دو گزینه و جود داردکه گزینه اول به این معناست که شما بدون رمز و نام کاربری وارد بانک اطلاعاتی خود میشوید
گزینه دوم به این معناست که شما اگر با نام کاربری و رمز وارد بانک اطلاعاتی خودتون شدید باید برای وصل شدن به بانک اطلاعاتی رمز ورود و نام کاربری خود را وارد کنید
درگزینه select or enter a database Name اسم بانک اطلاعاتی که سا ختیم را انتخاب میکنیم
از radioButton ها گزینه yes را انتخاب کنید و در قسمت پایین پنجره گزینه ذخیره رشته اتصال در فایل WebConfig را تیک میزنیم.
دراین مرحله جداول ای که ساختیم را انتخاب میکنیم
و در اخر گزینه Finish را میزنیم
پس از کلیک روی دکمه Finish جدول ما به ORM همانند شکل زیر اضافه میشود:
فقط باید ان نکته را یاداوری کنم که در آخر نیز یکبار برنامه را Buildکنید (ترکیبی از Contr+Shift+B.)
حالا مریم سراغ قسمت شیرین برنامه
همان طور که از تصویر معلوم است روی Controller. راست کلیک کرده وAddرا میزنیم و Controller. از نوع Controller with views, using Entity Framework. MVC 5 ایجاد میکنیم
در این مرحله شما بایستی اسم کلاس (که همان جدولی است که ساختیم را انتخاب میکنیم)و اسم مدلی که از پایگاه داده را با ان فراخوانی کردیم (همان توضیحی که بالا دادم ) را انتخاب کنم
Model class : User
Data Context class :UserDbContext
و اکنون از برنامه اجرا مگیریم و شروع به ثبت داده میکنیم
همانطور که مشاهده میکنید داده هایی که ثبت میکنیم در بانک اطلاعاتی ذخیره میشود
حالا دوباره یک داده به همان مشخصات قبلی ثبت میکنیم و همان طور که مشاهده میکنید اجازه ثبت این داده را به ما میدهد
که هدف ما از این اموزش این است که اجازه ثبت داده یکسان را به ما ندهد
حالا بریم سر اصل موضوع
برای حل این مشکل ما بایستی از RemoteAttribute استفاده کنیم
ابتدا وارد کنترلر صفحه میشیم و قطعه کد زیر دا در کنتلرر خود اضافه میکنیم
public JsonResult IsUserExists(string UserName) { //check if any of the UserName matches the UserName specified in the Parameter using the ANY extension method. return Json(!db.Users.Any(x => x.UserName == UserName) ,JsonRequestBehavior.AllowGet); }
توضیح کد بالا: یک متد به نام IsUserExists از نوع JsonResult تعریف کرده که در واقع چک میکند که دوتا اسم باهم برابر نباشد
شاید برای شما این سوال پیش بیاد که چرا ما از علامت مخالف(!) استفاده کردیم هدف ما از این کار این است هنگام برگشت json یک پیغام به کاربر نشان دهیم در واقع هدفمان این است که اگر اسم مشابه ای که قبلا در بانک اطلاعاتی ثبت شده است مجدد ثبت شود هم از ثبت شدن دوباره آن جلوگیری کند ( که البته برای این کار باید از 3عدد Script که در اخر توضیح میدم هم استفاده شود) و هم یک پیغام خطا به کاربر نشان دهد .
و در مرحله بعد شما یک کلاس درست میکنید که درآن کلاس، یک property به نام , UserName درست مکینم که در ان بررس میکنیم که میخواهیم این فیلد دوبار در سایت استفاده نشود
using System.ComponentModel.DataAnnotations; using System.Web.Mvc; namespace UniqueField.Models { [MetadataType(typeof(UserMetaData))] public partial class User { } class UserMetaData { [Remote("IsUserExists","Home",ErrorMessage="این نام کاربری در سایت موجود است !!! ")] public string UserName { get; set; } } }
درآخر هم داخل View Createاین 3 تا Script را اضافه مکنیم که باعث میشود قبل از ان که دکمه ثبت فشرده شود اگر دو داده مشابه در بانک اطلاعاتی بود پیغام خطا نشان داده میشود
<h2>ایجاد</h2> <script src="~/Scripts/jquery-1.10.2.js"></script> <script src="~/Scripts/jquery.validate.js"></script> <script src="~/Scripts/jquery.validate.unobtrusive.js"></script>
- ASP.net MVC
- 5k بازدید
- 7 تشکر