پیاده سازی عملیات CRUD با استفاده از AngularJS در MVC
شنبه 20 شهریور 1395در این مقاله قصد داریم با فریم ورک قدرتمند AngularJS آشنا شویم و عملیات حذف ، ویرایش ، افزودن را با استفاده از آن بر روی ASP.NET MVC پیاده سازی کنیم.
ابتدا یک برنامه از نوع MVC ایجاد می کنیم .

در این قسمت MVC را انتخاب می کنیم .

حال میتوان در Solution Explorer ، ساختار پروژه را مشاهده می کنیم .

حال میخواهیم کلاس های Model را به پروژه اضافه کنیم ، یک جدول به نام Employee در بانک اطلاعاتی ایجاد می کنیم تا عملیات CRUD را بر روی آن انجام دهیم .
CREATE TABLE [dbo].[Employee]( [Emp_Id] [int] IDENTITY(1,1) NOT NULL, [Emp_Name] [varchar](max) NULL, [Emp_City] [varchar](max) NULL, [Emp_Age] [int] NULL, CONSTRAINT [PK_Employee] PRIMARY KEY CLUSTERED ( [Emp_Id] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY] GO

برای عملیات CRUD پایگاه داده ، میخواهیم از روش Entity Framework Data First استفاده کنیم . برای این کار ، بر روی مدل کلیک راست کرده و New Item را انتخاب می کنیم .

حال در پنجره باز شده ADO.NET Entity Data Model را انتخاب می کنیم و نام آن را EmployeeModel قرار می دهیم .


برقرار کردن ارتباط با بانک اطلاعاتی SQL Server .

در این قسمت جدول Employee را انتخاب می کنیم و بر روی Finish کلیک می کنیم .

حال به پوشه Model مراجعه کنید مشاهده می کنید که مدل Employee ساخته شده است . حال ارتباط با بانک اطلاعاتی برقرار شده است .

بعد از این کار بسته AngularJS را نصب می کنیم . بر روی پروژه راست کلیک کرده و Manage Nuget Packages را انتخاب می کنیم .

در پوشه Scripts میتوان فایل AngularJS را مشاهده کنید .

حال کنترلر Employee را ایجاد می کنیم ، برای این کار بر رو پوشه Controller کلیک راست کرده و یک Controller خالی ایجاد می کنیم .

کد های زیر را در Controller وارد کنید
using System.Collections.Generic;
using System.Linq;
using System.Web.Mvc;
using AngularJSCURD.Models;
namespace AngularJSCURD.Controllers
{
public class EmployeeController : Controller
{
// GET: Employee
public ActionResult Index()
{
return View();
}
/// <summary>
///
/// Get All Employee
/// </summary>
/// <returns></returns>
public JsonResult Get_AllEmployee()
{
using (AngularDBEntities Obj = new AngularDBEntities())
{
List<Employee> Emp = Obj.Employees.ToList();
return Json(Emp, JsonRequestBehavior.AllowGet);
}
}
/// <summary>
/// Get Employee With Id
/// </summary>
/// <param name="Id"></param>
/// <returns></returns>
public JsonResult Get_EmployeeById(string Id)
{
using (AngularDBEntities Obj = new AngularDBEntities())
{
int EmpId = int.Parse(Id);
return Json(Obj.Employees.Find(EmpId), JsonRequestBehavior.AllowGet);
}
}
/// <summary>
/// Insert New Employee
/// </summary>
/// <param name="Employe"></param>
/// <returns></returns>
public string Insert_Employee(Employee Employe)
{
if (Employe != null)
{
using (AngularDBEntities Obj = new AngularDBEntities())
{
Obj.Employees.Add(Employe);
Obj.SaveChanges();
return "افزودن با موفقیت انجام شد ";
}
}
else
{
return "لطفا دوباره امتحان کنید";
}
}
/// <summary>
/// Delete Employee Information
/// </summary>
/// <param name="Emp"></param>
/// <returns></returns>
public string Delete_Employee(Employee Emp)
{
if (Emp != null)
{
using (AngularDBEntities Obj = new AngularDBEntities())
{
var Emp_ = Obj.Entry(Emp);
if (Emp_.State == System.Data.Entity.EntityState.Detached)
{
Obj.Employees.Attach(Emp);
Obj.Employees.Remove(Emp);
}
Obj.SaveChanges();
return "حذف با موفیقت انجام شد";
}
}
else
{
return "دوباره امتحان کنید ";
}
}
/// <summary>
/// Update Employee Information
/// </summary>
/// <param name="Emp"></param>
/// <returns></returns>
public string Update_Employee(Employee Emp)
{
if (Emp != null)
{
using (AngularDBEntities Obj = new AngularDBEntities())
{
var Emp_ = Obj.Entry(Emp);
Employee EmpObj = Obj.Employees.Where(x => x.Emp_Id == Emp.Emp_Id).FirstOrDefault();
EmpObj.Emp_Age = Emp.Emp_Age;
EmpObj.Emp_City = Emp.Emp_City;
EmpObj.Emp_Name = Emp.Emp_Name;
Obj.SaveChanges();
return "بروز رسانی با موفقیت انجام شد ";
}
}
else
{
return "لطفا دوباره امتحان کنید ";
}
}
}
}
بعد از این که Controller را ایجاد کرده ایم ، بر روی متد Index کلیک راست کرده و یک View خالی ایجاد می کنیم .

کد های زیر را در Index وارد می کنیم .
@{
ViewBag.Title = "Index";
}
<script src="~/Scripts/angular.min.js"></script>
<script src="~/Scripts/app.js"></script>
<style>
.btn-space {
margin-left: -5%;
background-color: cornflowerblue;
font-size: large;
}
</style>
<div ng-app="myApp">
<div ng-controller="myCtrl" ng-init="GetAllData()" class="divList">
<p class="divHead">لیست کاربران</p>
<table cellpadding="12" class="table table-bordered table-hover">
<tr>
<td>
<b>شماره</b>
</td>
<td>
<b>نام</b>
</td>
<td>
<b>شهر</b>
</td>
<td>
<b>سن</b>
</td>
<td>
<b>تنظیمات</b>
</td>
</tr>
<tr ng-repeat="Emp in employees">
<td>
{{Emp.Emp_Id}}
</td>
<td>
{{Emp.Emp_Name}}
</td>
<td>
{{Emp.Emp_City}}
</td>
<td>
{{Emp.Emp_Age}}
</td>
<td>
<input type="button" class="btn btn-warning" value="Update" ng-click="UpdateEmp(Emp)" />
<input type="button" class="btn btn-danger" value="Delete" ng-click="DeleteEmp(Emp)" />
</td>
</tr>
</table>
<div class="form-horizontal" role="form">
<div class="container">
<div class="row">
<h2>
<span id="spn">افزودن</span>
</h2>
</div>
<div class="row">
<div class="col-sm-6 col-lg-4">
<div class="form-group">
<label class="col-md-4 control-label">نام:</label>
<div class="col-md-8">
<input type="text" class="form-control" id="inputEmail" placeholder="Name" ng-model="EmpName">
</div>
</div>
</div>
<div class="col-sm-6 col-lg-4">
<div class="form-group">
<label class="col-md-4 control-label">شهر:</label>
<div class="col-md-8">
<input type="text" class="form-control" id="inputPassword" placeholder="City" ng-model="EmpCity">
</div>
</div>
</div>
<div class="col-sm-6 col-lg-4">
<div class="form-group">
<label class="col-md-4 control-label">سن:</label>
<div class="col-md-8">
<input type="text" class="form-control" id="inputLabel3" placeholder="Age" ng-model="EmpAge">
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-sm-6 col-lg-4">
<input type="button" id="btnSave" class="form-control btn-space" value="ارسال" ng-click="InsertData()" />
</div>
</div>
</div>
</div>
</div>
@Html.Hidden("EmpID_")
</div>
برای پیاده سازی عملیات CURD در AngularJS ، نیاز است یک فایل Java Script ایجاد کنیم ، و درون آن کد های لازم را وارد کنید.
ابتدا ، فایل اسکریپت ایجاد می کنیم و کدهای زیر را در آن وارد می کنیم .

کد جاوااسکریپت
var app = angular.module("myApp", []);
app.controller("myCtrl",
function($scope, $http) {
$scope.InsertData = function() {
var Action = document.getElementById("btnSave").getAttribute("value");
if (Action === "ارسال") {
$scope.Employe = {};
$scope.Employe.Emp_Name = $scope.EmpName;
$scope.Employe.Emp_City = $scope.EmpCity;
$scope.Employe.Emp_Age = $scope.EmpAge;
$http({
method: "post",
url: "http://localhost:62933/Employee/Insert_Employee",
datatype: "json",
data: JSON.stringify($scope.Employe)
})
.then(function(response) {
alert(response.data);
$scope.GetAllData();
$scope.EmpName = "";
$scope.EmpCity = "";
$scope.EmpAge = "";
});
} else {
$scope.Employe = {};
$scope.Employe.Emp_Name = $scope.EmpName;
$scope.Employe.Emp_City = $scope.EmpCity;
$scope.Employe.Emp_Age = $scope.EmpAge;
$scope.Employe.Emp_Id = document.getElementById("EmpID_").value;
$http({
method: "post",
url: "http://localhost:62933/Employee/Update_Employee",
datatype: "json",
data: JSON.stringify($scope.Employe)
})
.then(function(response) {
alert(response.data);
$scope.GetAllData();
$scope.EmpName = "";
$scope.EmpCity = "";
$scope.EmpAge = "";
document.getElementById("btnSave").setAttribute("value", "ارسال");
document.getElementById("btnSave").style.backgroundColor = "cornflowerblue";
document.getElementById("spn").innerHTML = "افزودن کاربر";
});
}
}
$scope.GetAllData = function() {
$http({
method: "get",
url: "http://localhost:62933/Employee/Get_AllEmployee"
})
.then(function(response) {
$scope.employees = response.data;
},
function() {
alert("Error Occur");
});
};
$scope.DeleteEmp = function(Emp) {
$http({
method: "post",
url: "http://localhost:62933/Employee/Delete_Employee",
datatype: "json",
data: JSON.stringify(Emp)
})
.then(function(response) {
alert(response.data);
$scope.GetAllData();
});
};
$scope.UpdateEmp = function(Emp) {
document.getElementById("EmpID_").value = Emp.Emp_Id;
$scope.EmpName = Emp.Emp_Name;
$scope.EmpCity = Emp.Emp_City;
$scope.EmpAge = Emp.Emp_Age;
document.getElementById("btnSave").setAttribute("value", "ویرایش");
document.getElementById("btnSave").style.backgroundColor = "Yellow";
document.getElementById("spn").innerHTML = "ویرایش کاربر";
}
});
حال رفرنس های Angular و AngularCodeرا به Index اضافه کنیم .

تا اینجای کار پروژه تکمیل شده است حال میخواهیم آن را اجرا کنیم .

حال میخواهیم درباره عملیات CRUD توضیح دهیم تا نحوه کار کردن آن را درک کنید .
دریافت رکود های Employee
زمانی که برنامه اجرا می شود ، ابتدا تمامی رکورد های Employee را دریافت می شود و در قالب یک Grid نمایش داده می شود.شما میتوان مشاهده کنید که در دایرکتیو ng-init ، getAllData فراخوانی شده است . این متد تمامی رکورد ها را دریافت می کند .
<div ng-controller="myCtrl" ng-init="GetAllData()" class="divList">
کد درون فایل app.js
$scope.GetAllData = function() {
$http({
method: "get",
url: "http://localhost:62933/Employee/Get_AllEmployee"
})
.then(function(response) {
$scope.employees = response.data;
},
function() {
alert("Error Occur");
});
};
در متد GetAllData ، با استفاده از سرویس $http در AngularJS ، متد Get_AllEmployee در کنترلر Employee فراخوانی می شود . کد زیر شامل متد Get_AllEmployee است :
/// <summary>
///
/// Get All Employee
/// </summary>
/// <returns></returns>
public JsonResult Get_AllEmployee()
{
using (AngularDBEntities Obj = new AngularDBEntities())
{
List<Employee> Emp = Obj.Employees.ToList();
return Json(Emp, JsonRequestBehavior.AllowGet);
}
}
در این متد ما تمام employee ها را از Employee دریافت کرده و به عنوان JSON result ارسال می کنیم .
افزودن Employee
زمانی بر روی کلیک ارسال کلیک کنید ، متد InsertData فراخوانی می شود .
<div class="row">
<div class="col-sm-6 col-lg-4">
<input type="button" id="btnSave" class="form-control btn-space" value="ارسال" ng-click="InsertData()" />
</div>
</div>
در این متد ، داده ها درون فرم دریافت شد و به شی Employee افزوده می شود و متد Insert_Employee در کنترلر فرخوانی می شود و Employee به عنوان پارامتر ارسال می شود .
$scope.InsertData = function() {
var Action = document.getElementById("btnSave").getAttribute("value");
if (Action === "ارسال") {
$scope.Employe = {};
$scope.Employe.Emp_Name = $scope.EmpName;
$scope.Employe.Emp_City = $scope.EmpCity;
$scope.Employe.Emp_Age = $scope.EmpAge;
$http({
method: "post",
url: "http://localhost:62933/Employee/Insert_Employee",
datatype: "json",
data: JSON.stringify($scope.Employe)
})
.then(function(response) {
alert(response.data);
$scope.GetAllData();
$scope.EmpName = "";
$scope.EmpCity = "";
$scope.EmpAge = "";
});
} else {
$scope.Employe = {};
$scope.Employe.Emp_Name = $scope.EmpName;
$scope.Employe.Emp_City = $scope.EmpCity;
$scope.Employe.Emp_Age = $scope.EmpAge;
$scope.Employe.Emp_Id = document.getElementById("EmpID_").value;
$http({
method: "post",
url: "http://localhost:62933/Employee/Update_Employee",
datatype: "json",
data: JSON.stringify($scope.Employe)
})
.then(function(response) {
alert(response.data);
$scope.GetAllData();
$scope.EmpName = "";
$scope.EmpCity = "";
$scope.EmpAge = "";
document.getElementById("btnSave").setAttribute("value", "ارسال");
document.getElementById("btnSave").style.backgroundColor = "cornflowerblue";
document.getElementById("spn").innerHTML = "افزودن کاربر";
});
}
}
در این قسمت از کنترلر ، شی Employee در Employee entity اضافه می شود .
/// <summary>
/// Insert New Employee
/// </summary>
/// <param name="Employe"></param>
/// <returns></returns>
public string Insert_Employee(Employee Employe)
{
if (Employe != null)
{
using (AngularDBEntities Obj = new AngularDBEntities())
{
Obj.Employees.Add(Employe);
Obj.SaveChanges();
return "افزودن با موفقیت انجام شد ";
}
}
else
{
return "لطفا دوباره امتحان کنید";
}
}
پس از انجام عملیات یک پیام نمایش داده می شود و یک رکورد به جدول اضافه می شود .

حذف یکی از رکورد های Employee
ما با استفاده از دایرکتیو ng-repeat ، Name, Age, Id و City را به جدول ها اضافه می کنیم . همان طور که مشاهده می کنید در ستون “ تنظیمات” چندButton برای دستور های "حذف" و "ویرایش" قرار داده ایم و با دایرکتیو ng-clik ، متد DeleteEmp و UpdateEmp را برای حذف و ویرایش فراخوانی می کنیم . در این دو متد شی Employee را ارسال می کنیم .

در متد DeleteEmp ، متد Delete_Employee که در Controller قرار دارد ، با استفاده از $http فراخوانی می شود .
$scope.DeleteEmp = function(Emp) {
$http({
method: "post",
url: "http://localhost:62933/Employee/Delete_Employee",
datatype: "json",
data: JSON.stringify(Emp)
})
.then(function(response) {
alert(response.data);
$scope.GetAllData();
});
};
متد Delete_Employee رکورد مورد نظر را حذف می کند.
public string Delete_Employee(Employee Emp)
{
if (Emp != null)
{
using (AngularDBEntities Obj = new AngularDBEntities())
{
var Emp_ = Obj.Entry(Emp);
if (Emp_.State == System.Data.Entity.EntityState.Detached)
{
Obj.Employees.Attach(Emp);
Obj.Employees.Remove(Emp);
}
Obj.SaveChanges();
return "حذف با موفیقت انجام شد";
}
}
else
{
return "دوباره امتحان کنید ";
}
}
پس از انجام عملیات حذف یک پیغام نمایش داده می شود .

ویرایش یکی از رکورد های Employee
دستور ویرایش ، UpdateEmp را فراخوانی می کند و اطلاعات را درون Textbox ها قرار می دهد تا تغیرات اعمال شوند .
$scope.UpdateEmp = function(Emp) {
document.getElementById("EmpID_").value = Emp.Emp_Id;
$scope.EmpName = Emp.Emp_Name;
$scope.EmpCity = Emp.Emp_City;
$scope.EmpAge = Emp.Emp_Age;
document.getElementById("btnSave").setAttribute("value", "ویرایش");
document.getElementById("btnSave").style.backgroundColor = "Yellow";
document.getElementById("spn").innerHTML = "ویرایش کاربر";
}
حال میخواهیم یکی از رکورد ها را تغییر دهیم و بر روی ویرایش کلیک کنیم .
به عنوان مثال "شهر" را تغییر می دهیم .
زمانی که بر روی ویرایش کلیک شود ، متد InssertData فراخوانی شده و قسمت else اجرا شود تا دکمه ویرایش به ارسال تغییر کند .
else {
$scope.Employe = {};
$scope.Employe.Emp_Name = $scope.EmpName;
$scope.Employe.Emp_City = $scope.EmpCity;
$scope.Employe.Emp_Age = $scope.EmpAge;
$scope.Employe.Emp_Id = document.getElementById("EmpID_").value;
$http({
method: "post",
url: "http://localhost:62933/Employee/Update_Employee",
datatype: "json",
data: JSON.stringify($scope.Employe)
})
.then(function(response) {
alert(response.data);
$scope.GetAllData();
$scope.EmpName = "";
$scope.EmpCity = "";
$scope.EmpAge = "";
document.getElementById("btnSave").setAttribute("value", "ارسال");
document.getElementById("btnSave").style.backgroundColor = "cornflowerblue";
document.getElementById("spn").innerHTML = "افزودن کاربر";
});
}
همان طور که در زیر مشاهده می کنید ، متد Update_Employee در Controller فراخوانی می شود . در متد Update_Employee رکورد مورد نظر ویرایش می شود و اگر عملیات با موفقیت انجام شود یک پیغام نمایش داده می شود .
/// <summary>
/// Update Employee Information
/// </summary>
/// <param name="Emp"></param>
/// <returns></returns>
public string Update_Employee(Employee Emp)
{
if (Emp != null)
{
using (AngularDBEntities Obj = new AngularDBEntities())
{
var Emp_ = Obj.Entry(Emp);
Employee EmpObj = Obj.Employees.Where(x => x.Emp_Id == Emp.Emp_Id).FirstOrDefault();
EmpObj.Emp_Age = Emp.Emp_Age;
EmpObj.Emp_City = Emp.Emp_City;
EmpObj.Emp_Name = Emp.Emp_Name;
Obj.SaveChanges();
return "بروز رسانی با موفقیت انجام شد ";
}
}
else
{
return "لطفا دوباره امتحان کنید ";
}
}
همان طور که مشاهده می کنید عملیات ویرایش با موفقیت انجام شده است .

آموزش asp.net mvc
- ASP.net MVC
- 2k بازدید
- 7 تشکر