Sweet Alert در MVC
جمعه 11 دی 1394پیغام هایی که توسط جاوااسکریپت داده می شوند به نظر ابتدایی می آیند و زیبایی خاصی ندارند ، در این مقاله نحوه پیاده سازی Sweet Alert در MVC و در جاهای مختلف ، مثلا در هنگام حذف یک رکورد و یا در هنگام Validation های سیستم را آموزش خواهیم داد.
پیغام هایی که توسط جاوااسکریپت داده می شوند به نظر ابتدایی می آیند و زیبایی خاصی ندارند ، در این مقاله نحوه پیاده سازی Sweet Alert در MVC و در جاهای مختلف ، مثلا در هنگام حذف یک رکورد و یا در هنگام Validation های سیستم را آموزش خواهیم داد
ابتدا یک Application از نوع mvc و از مدل Empty ایجاد می کنیم
حال شکل پوشه ها در داخل پروژه ما به صورت زیر است
به مسیر Tools->NugetPackageManager->PackageManagerConsol بروید و بعد از نوشتن دستور زیر کلید اینتر را فشار دهید
Install-Package SweetAlert
بعد از موفقیت آمیز بودن اجرای این دستور Solution Explorer به شکل زیر خواهد بود
حال بر روی پوشه مدل خود کلیک راست کرده و یک کلاس به نام OrderFood اضافه کنید
کد این کلاس به صورت زیر است
public class OrderFood { [Key] public int OrderID { get; set; } [Required(ErrorMessage = "Please enter OrderCode")] public string OrderCode { get; set; } [Required(ErrorMessage = "Please enter OrderPrice")] public string OrderPrice { get; set; }
یک کنترلر به نام Home ایجاد کنید این کنترلر از نوع Empty است
بعد از افزودن یک کنترلر ازنوع Empty فقط یک action به نام ایندکس در داخل آن قرار دارد . Action های زیر را به پروژه اضافه کنید
public ActionResult Index() { return View(); } [HttpGet] public ActionResult Create() { return View(new OrderFood()); } [HttpPost] public ActionResult Create(OrderFood OrderFood) { if (ModelState.IsValid) { TempData["Message"] = "Your Order " + OrderFood.OrderCode + "has been Saved Successfully "; return RedirectToAction("Create"); } else { } return View(OrderFood); }
برای کنترلر Home و اکشن Create یک view اضافه کنید نوع این view از نوع create باشد و مدل آن را هم orderFood قرار دهید .
با این کار یک پوشه همنام کنترلر در داخل View ایجاد خواهد شد و همنام با اکشن ها (Action) هم فایل هایی با پسوند .cshtml قرار خواهند گرفت .
حال باید اسکریپت های لازم را در داخل این صفحه view قرار دهیم
<script src="~/Scripts/jquery-1.10.2.min.js"></script> <script src="~/Scripts/jquery.validate.min.js"></script> <script src="~/Scripts/jquery.validate.unobtrusive.min.js"></script> <script src="~/Scripts/jquery-1.11.3.min.js"></script> <script src="~/Scripts/jquery.validate.min.js"></script> <script src="~/Scripts/jquery.validate.unobtrusive.min.js"></script> <script src="https://lipis.github.io/bootstrap-sweetalert/lib/sweet-alert.js"></script> <link href="~/Content/sweetalert/sweet-alert.css" rel="stylesheet" />
از آنجایی که در داخل مدل خود تعریف کرده ایم که چه فیلد هایی نباید خالی باشند اگر در آنها چیزی وارد نکنیم و سپس دکمه submit را بزنیم پیغام خطای validation که توسط جاوااسکریپت داده می شود را دریافت می کنیم .برای این که این پیغام را به شکل زیباتر و توسط Sweet Alert دریافت کنیم اسکریپت های زیر را به صفحه مورد نظر خود اضافه می کنیم .
<script type="text/javascript"> function validateData() { if ($("#OrderCode").val() == "") { swal("لطفا مقدار OrderCode را وارد کنید !"); return false; } else if ($("#OrderPrice").val() == "") { swal("لطفا مقدار OrderPrice را وارد کنید !"); return false; } else { return true; } } @if(TempData["Message"] != null) { <text > $(window).load(function() { $(document).ready(function() { swal({ title: "Message", text: "@TempData["Message "]", type: "success" }); }); }); </text> } </script>
بعد از اجرا گرفتن این صفحه و عدم وارد کردن فیلد های ضروری شکل زیر را خواهید دید
کدهای کامل صفحه View به صورت زیر است
@model sweet.Models.OrderFood @{ ViewBag.Title = "Create"; } <a> <h2>برنامه نویسان :مرجع تخصصی برنامه نویسان</h2> </a> @using (Html.BeginForm()) { @Html.AntiForgeryToken() <div class="form-horizontal"> <h4>OrderFood</h4> <hr /> @Html.ValidationSummary(true, "", new { @class = "text-danger" }) <div class="form-group"> @Html.LabelFor(model => model.OrderCode, htmlAttributes: new { @class = "control-label col-md-2" }) <div class="col-md-10"> @Html.EditorFor(model => model.OrderCode, new { htmlAttributes = new { @class = "form-control" } }) @Html.ValidationMessageFor(model => model.OrderCode, "", new { @class = "text-danger" }) </div> </div> <div class="form-group"> @Html.LabelFor(model => model.OrderPrice, htmlAttributes: new {@class = "control-label col-md-2"}) <div class="col-md-10"> @Html.EditorFor(model => model.OrderPrice, new {htmlAttributes = new {@class = "form-control"}}) @Html.ValidationMessageFor(model => model.OrderPrice, "", new {@class = "text-danger"}) </div> </div> <div class="form-group"> <div class="col-md-offset-2 col-md-10"> <input type="submit" value="Create" class="btn btn-default" /> </div> </div> </div> } <div> @Html.ActionLink("Back to List", "Index") </div> <script src="~/Scripts/jquery-1.10.2.min.js"></script> <script src="~/Scripts/jquery.validate.min.js"></script> <script src="~/Scripts/jquery.validate.unobtrusive.min.js"></script> <script src="~/Scripts/jquery-1.11.3.min.js"></script> <script src="~/Scripts/jquery.validate.min.js"></script> <script src="~/Scripts/jquery.validate.unobtrusive.min.js"></script> <script src="https://lipis.github.io/bootstrap-sweetalert/lib/sweet-alert.js"></script> <link href="~/Content/sweetalert/sweet-alert.css" rel="stylesheet" /> <script type="text/javascript"> function validateData() { if ($("#OrderCode").val() == "") { swal("لطفا مقدار OrderCode را وارد کنید !"); return false; } else if ($("#OrderPrice").val() == "") { swal("لطفا مقدار OrderPrice را وارد کنید !"); return false; } else { return true; } } @if(TempData["Message"] != null) { <text > $(window).load(function() { $(document).ready(function() { swal({ title: "Message", text: "@TempData["Message "]", type: "success" }); }); }); </text> } </script> <input type="submit" onclick=" return validateData(); " value="Create"/>
حال برای ایجاد پیغام های اعتبارسنجی یک کنترلر به نام Delete ایجاد می کنیم .
در داخل این کنترلر دو Action به نام های Details و delete وجود دارد .ساختار کدهای کنترلر به صورت زیر است
[HttpGet] public ActionResult Details() { List<OrderFood> listor = new List<OrderFood>(); OrderFood OF = new OrderFood(); OF.OrderID = 1; OF.OrderCode = "0001"; OF.OrderPrice = "1000"; OrderFood OF1 = new OrderFood(); OF1.OrderID = 2; OF1.OrderCode = "0002"; OF1.OrderPrice = "2000"; listor.Add(OF); listor.Add(OF1); return View(listor); } public ActionResult delete(string OrderID) { return Json("delete", JsonRequestBehavior.AllowGet); }
بر روی Action به نام Details کلیک راست کرده و یک view با حالت List و با مدل orderfood ایجاد می کنیم .
بعد از اجرا شکل زیر را خواهیم دید.
حال اسکریپت های لازم را اضافه می کنیم .
<meta name="viewport" content="width=device-width" /> <title>Details</title> <script src="/Scripts/jquery-1.11.3.min.js"></script> <script src="~/Scripts/jquery.validate.min.js"> </script> <script src="~/Scripts/jquery.validate.unobtrusive.min.js"> </script> <link href="/Content/bootstrap.min.css" rel="stylesheet" /> <script src="/Scripts/bootstrap.js"> </script> <script src="https://lipis.github.io/bootstrap-sweetalert/lib/sweet-alert.js"> </script> <link href="~/Content/sweetalert/sweet-alert.css" rel="stylesheet" />
حال باید validation های مورد نظرمان را به این صفحه اضافه کنیم تا sweet alert بر طبق این قوانین به ارائه پیغام مناسب به کاربر بپردازد
<script type="text/javascript"> function deleteOrder(OrderID) { debugger; swal({ title: "Are you sure?", text: "Are you sure that you want to delete this Order?", type: "warning", showCancelButton: true, closeOnConfirm: false, confirmButtonClass: "btn-danger", confirmButtonText: "Delete", confirmButtonColor: "#ec6c62" }, function () { $.ajax({ url: "/DeleteConfirmation/delete/", data: { "OrderID": OrderID }, type: "DELETE" }) .done(function (data) { sweetAlert ({ title: "Deleted!", text: "Your file was successfully deleted!", type: "success" }, function () { window.location.href = '/DeleteConfirmation/Details'; }); }) .error(function (data) { swal("Oops", "We couldn't connect to the server!", "error"); }); }); } </script>
یک نمونه از پیغام های زیبای این تکنولوژی در زیر آورده شده است
کد کامل صفحه Details به صورت زیر است
@model IEnumerable<sweet.Models.OrderFood> @{ Layout = null; } <!DOCTYPE html> <html> <head> <meta name="viewport" content="width=device-width" /> <title>Details</title> <script src="/Scripts/jquery-1.11.3.min.js"></script> <script src="~/Scripts/jquery.validate.min.js"> </script> <script src="~/Scripts/jquery.validate.unobtrusive.min.js"> </script> <link href="/Content/bootstrap.min.css" rel="stylesheet" /> <script src="/Scripts/bootstrap.js"> </script> <script src="https://lipis.github.io/bootstrap-sweetalert/lib/sweet-alert.js"> </script> <link href="~/Content/sweetalert/sweet-alert.css" rel="stylesheet" /> <script type="text/javascript"> function deleteOrder(OrderID) { debugger; swal({ title: "Are you sure?", text: "Are you sure that you want to delete this Order?", type: "warning", showCancelButton: true, closeOnConfirm: false, confirmButtonClass: "btn-danger", confirmButtonText: "Delete", confirmButtonColor: "#ec6c62" }, function () { $.ajax({ url: "/DeleteConfirmation/delete/", data: { "OrderID": OrderID }, type: "DELETE" }) .done(function (data) { sweetAlert ({ title: "Deleted!", text: "Your file was successfully deleted!", type: "success" }, function () { window.location.href = '/DeleteConfirmation/Details'; }); }) .error(function (data) { swal("Oops", "We couldn't connect to the server!", "error"); }); }); } </script> </head> <body style="background-color: darkkhaki;"> <p style = "text-align:left" > Delete Order </p> <table style="margin-left:20px;"> <tr> <th style="text-align:center"> @Html.DisplayNameFor(model => model.OrderCode) | </th> <th style="text-align:center"> @Html.DisplayNameFor(model => model.OrderPrice) | </th> <th> Action </th> </tr> @foreach (var item in Model) { <tr> <td style="text-align:center"> @Html.DisplayFor(modelItem => item.OrderCode) </td> <td style = "text-align:center" > @Html.DisplayFor(modelItem => item.OrderPrice) </td> <td style = "text-align:center" > <input id="Delete" onclick="deleteOrder('@item.OrderID')" type="button" value="Delete" /> </td> </tr> } </table> </body> </html>
- ASP.net MVC
- 4k بازدید
- 8 تشکر