• CRUD与SPA, ASP。NET Web API和Angular.js


    介绍 在本文中,我将用AngularJS演示一个简单的CRUD过程,并使用大量的图形表示。一张图片胜过千言万语,因此我相信在一篇文章中配上适当的截屏。这里我将描述你将如何创建CRUD在angularjs。我将展示一些成功的步骤如下: 背景 在visual studio web应用程序中,使用客户端服务器架构。下面是两个进程或两个应用程序,它们将相互通信以交换一些信息。在这两个进程中,一个作为客户端进程,另一个作为服务器。 在传统的web应用程序中,客户机(浏览器)通常向服务器请求页面以启动通信。然后服务器处理请求并将页面的HTML发送给客户机(浏览器)。 在单页面应用程序中,首先通过初始请求将整个页面加载到客户机中,然后后续操作必须通过Ajax请求进行更新,而不需要重新加载整个页面。SPA缩短了响应用户动作的时间,从而使用户体验更加流畅。 开发与传统web应用程序不同的SPA体系结构是非常困难的。然而,最熟悉的技术,如JavaScript框架,如AngularJS, asp . net Web API,以及CSS3的新样式特性,使设计和构建水疗中心变得非常容易。 在本文中,我将向您展示如何使用ASP创建SPA和CRUD。NET Web API, AngularJS。 概述 目标 在这篇文章中,你将学习如何: 使用Twitter-Bootstrap创建一个响应式UI 先决条件 Windows 7或更高版本,至少4GB内存visual Studio Express 2013 for Web 或更大的SQL Server 2012, SQL Server Express,或localdb asp。NET MVC 5 angularjs在60分钟左右的电子书或视频 设置 为了创建此应用程序,请遵循以上先决条件。 练习 本文包括以下练习: 创建一个Web api创建一个SPA接口 练习1:创建Web API 来设置web api应用程序 打开Visual Studio Express 2013 for web并选择文件| New >开始一个新的解决方案。 , 创建新项目 2. 在Visual Studio 2013中通过选择“新建项目”对话框创建一个新的Wep API项目,然后选择ASP。在Visual c# | Web选项卡下的。NET Web应用程序。使sure 。NET Framework 4.5被选中,命名为它,选择一个位置并点击OK。 创建一个新的ASP。NET Web应用项目 3.在,新的ASP。在“网络项目”对话框中,选择“模板”并选择“Web api”选项。Also  Click  OK 继续。 使用MVC模板创建一个新项目,包括Web API组件 4. 在“解决方案资源管理器”中,右键单击项目和构建的解决方案。 构建一个新的解决方案 5. 现在创建数据库“Inventory”和表“Customer”并设置主键Id,下面是脚本: 隐藏,收缩,复制Code

    USE [Inventory]
    GO
    
    DROP TABLE [dbo].[Customer]
    GO
    
    SET ANSI_NULLS ON
    GO
    
    SET QUOTED_IDENTIFIER ON
    GO
    
    CREATE TABLE [dbo].[Customer](
        [Id] [int] NOT NULL,
        [Name] [nvarchar](50) NULL,
        [Address] [nvarchar](50) NULL,
        [City] [nvarchar](50) NULL,
        [Country] [nvarchar](50) NULL,
        [DateOfBirth] [datetime] NULL,
        [Age] [int] NULL,
     CONSTRAINT [PK_Customer] PRIMARY KEY CLUSTERED 
     (
        [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]
    
     GO

    6. 创建数据库和表之后,现在你必须通过这个对话框创建实体框架工作模型对象。 创建实体框架数据模型对象 7. 在实体数据模型向导中,从数据库中选择EF设计器,并按下next按钮 选择实体框架模型内容 8. 在实体数据模型Wizerd选择您的数据连接,但单击新连接…按钮 从“连接属性”对话框中选择“连接字符串” 9. 在“连接属性”窗口对话框中,写入服务器名称、sql身份验证并选择数据库名称,然后完成 从这个窗口中选择连接字符串 10. 在实体数据模型向导中,选择yes,将感兴趣的数据包含在连接字符串中,然后按下next按钮 在连接字符串中选择感知数据。 11. 在实体数据模型向导中,选择表并按finish按钮 创建客户表模型对象 12. 完成上述过程后构建解决方案 13. 在解决方案资源管理器中,右键单击rdlcreportproject的控件文件夹,并选择添加新的控制器项……然后用这种方法创建CustomerController 选择api控制器 选择Api控制器名称 14. 然后将CustomerController.cs 文件添加到rdlcreport项目的controllers&文件夹中,其中包含一个空的customercontrollerler 在RDLCReport.Controllers 名称空间之前添加以下程序集 隐藏,复制Code

    using System;
    using System.Collections.Generic;
    using System.Data.Entity;
    using System.Data.Entity.Infrastructure;
    using System.Linq;
    using System.Net;
    using System.Net.Http;
    using System.Web.Http;

    15. 在CustomerController.cs文件中,添加fol将代码导入customercontroller类。 隐藏,复制Code

    InventoryEntities db = new InventoryEntities();
    

    隐藏,复制Code

            //get all customer
            [HttpGet]
            public IEnumerable<Customer> Get()
            {
                return db.Customers.AsEnumerable();
            }
    
            //get customer by id
            public Customer Get(int id)
            {
                Customer customer = db.Customers.Find(id);
                if (customer == null)
                {
                    throw new HttpResponseException(Request.CreateResponse(HttpStatusCode.NotFound));
                }
                return customer;
            }
            

    隐藏,复制Code

            //insert customer
            public HttpResponseMessage Post(Customer customer)
            {
                if (ModelState.IsValid)
                {
                    db.Customers.Add(customer);
                    db.SaveChanges();
                    HttpResponseMessage response = Request.CreateResponse(HttpStatusCode.Created, customer);
                    response.Headers.Location = new Uri(Url.Link("DefaultApi", new { id = customer.Id }));
                    return response;
                }
                else
                {
                    return Request.CreateErrorResponse(HttpStatusCode.BadRequest, ModelState);
                }
            }

    隐藏,复制Code

            //update customer
            public HttpResponseMessage Put(int id, Customer customer)
            {
                if (!ModelState.IsValid)
                {
                    return Request.CreateErrorResponse(HttpStatusCode.BadRequest, ModelState);
                }
                if (id != customer.Id)
                {
                    return Request.CreateResponse(HttpStatusCode.BadRequest);
                }
                db.Entry(customer).State = EntityState.Modified;
                try
                {
                    db.SaveChanges();
                }
                catch (DbUpdateConcurrencyException ex)
                {
                    return Request.CreateErrorResponse(HttpStatusCode.NotFound, ex);
                }
                return Request.CreateResponse(HttpStatusCode.OK);
            }

    隐藏,复制Code

            //delete customer by id
            public HttpResponseMessage Delete(int id)
            {
                Customer customer = db.Customers.Find(id);
                if (customer == null)
                {
                    return Request.CreateResponse(HttpStatusCode.NotFound);
                }
                db.Customers.Remove(customer);
                try
                {
                    db.SaveChanges();
                }
                catch (DbUpdateConcurrencyException ex)
                {
                    return Request.CreateErrorResponse(HttpStatusCode.NotFound, ex);
                }
                return Request.CreateResponse(HttpStatusCode.OK, customer);
            }

    隐藏,复制Code

            //prevent memory leak
            protected override void Dispose(bool disposing)
            {
                db.Dispose();
                base.Dispose(disposing);
            }

    练习2:创建SPA接口 要做的: 1. 从tools&s>Library软件包管理器中打开软件包管理器控制台。输入以下命令来安装angularjs . corenuget包。 隐藏,复制Code

    Install-Package AngularJS.Core

    2. 在“解决方案资源管理器”中,右键单击rdlcreport项目的脚本文件夹,并选择“添加|新文件夹”。命名文件夹并按Enter键。 3.右键单击刚刚创建的应用文件夹,选择“添加| JavaScript文件”。 创建一个新的JavaScript文件 4. 在“指定项目名称”对话框中,在“项目名称”文本框中键入测验控制按钮,然后单击“确定”。 命名新的JavaScript文件 5. 在customerctr .js 文件中,添加以下代码来声明和初始化AngularJS。 隐藏,收缩,复制Code

        //create angularjs controller
        var app = angular.module('app', []);//set and get the angular module
        app.controller('customerController', ['$scope', '$http', customerController]);
    
        //angularjs controller method
        function customerController($scope, $http) {
    
            //declare variable for mainain ajax load and entry or edit mode
            $scope.loading = true;
            $scope.addMode = false;
    
            //get all customer information
            $http.get('/api/Customer/').success(function (data) {
                $scope.customers = data;
                $scope.loading = false;
            })
            .error(function () {
                $scope.error = "An Error has occured while loading posts!";
                $scope.loading = false;
            });
    
            //by pressing toggleEdit button ng-click in html, this method will be hit
            $scope.toggleEdit = function () {
                this.customer.editMode = !this.customer.editMode;
            };
    
            //by pressing toggleAdd button ng-click in html, this method will be hit
            $scope.toggleAdd = function () {
                $scope.addMode = !$scope.addMode;
            };
    
            //Inser Customer
            $scope.add = function () {
                $scope.loading = true;
                $http.post('/api/Customer/', this.newcustomer).success(function (data) {
                    alert("Added Successfully!!");
                    $scope.addMode = false;
                    $scope.customers.push(data);
                    $scope.loading = false;
                }).error(function (data) {
                    $scope.error = "An Error has occured while Adding Customer! " + data;
                    $scope.loading = false;
                });
            };
    
            //Edit Customer
            $scope.save = function () {
                alert("Edit");
                $scope.loading = true;
                var frien = this.customer;  
                alert(frien);          
                $http.put('/api/Customer/' + frien.Id, frien).success(function (data) {
                    alert("Saved Successfully!!");
                    frien.editMode = false;
                    $scope.loading = false;
                }).error(function (data) {
                    $scope.error = "An Error has occured while Saving customer! " + data;
                    $scope.loading = false;
                });
            };
    
           //Delete Customer
            $scope.deletecustomer = function () {
                $scope.loading = true;
                var Id = this.customer.Id;
                $http.delete('/api/Customer/' + Id).success(function (data) {
                    alert("Deleted Successfully!!");
                    $.each($scope.customers, function (i) {
                        if ($scope.customers[i].Id === Id) {
                            $scope.customers.splice(i, 1);
                            return false;
                        }
                    });
                    $scope.loading = false;
                }).error(function (data) {
                    $scope.error = "An Error has occured while Saving Customer! " + data;
                    $scope.loading = false;
                });
            };
    
        }

    6. 从而,customerCtrl。上面的所有代码,都可以放到这个javascript函数中。 隐藏,复制Code

    (function () {
          'use strict';
    
       /*Write above code here*/
    
    })();

    7. _Layout拷贝。路径为views&shared_layout的页面。cshtml,添加以下行 创建角引导指令 8. 在bundleconfig文件中,添加两行,路径为App_Start> BundleConfig.cs 添加java脚本文件 9. ,在Views>Home>索引。cshtml文件添加以下代码 隐藏,收缩,复制Code

    <div data-ng-controller="customerController" class="container">
        <div class="row">
            <div class="col-md-12">
                <strong class="error">{{ error }}</strong>
                <p data-ng-hide="addMode"><a data-ng-click="toggleAdd()" href="javascript:;" class="btn btn-primary">Add New</a></p>
                <form name="addCustomer" data-ng-show="addMode" style="600px;margin:0px auto;">
                    <div class="form-group">
                        <label for="cid" class="col-sm-2 control-label">ID:</label>
                        <div class="col-sm-10">
                            <input type="text" class="form-control" id="cid" placeholder="please enter id" data-ng-model="newcustomer.Id" required />
                        </div>
                    </div>
                    <div class="form-group">
                        <label for="cname" class="col-sm-2 control-label">Name:</label>
                        <div class="col-sm-10">
                            <input type="text" class="form-control" id="cname" placeholder="please enter your name" data-ng-model="newcustomer.Name" required />
                        </div>
                    </div>
                    <div class="form-group">
                        <label for="address" class="col-sm-2 control-label">Address:</label>
                        <div class="col-sm-10">
                            <input type="text" class="form-control" id="address" placeholder="please enter your address" data-ng-model="newcustomer.Address" required />
                        </div>
                    </div>
                    <div class="form-group">
                        <label for="city" class="col-sm-2 control-label">City:</label>
                        <div class="col-sm-10">
                            <input type="text" class="form-control" id="city" placeholder="please enter your city" data-ng-model="newcustomer.City" required />
                        </div>
                    </div>
                    <div class="form-group">
                        <label for="country" class="col-sm-2 control-label">Country:</label>
                        <div class="col-sm-10">
                            <input type="text" class="form-control" id="country" placeholder="please enter your country" data-ng-model="newcustomer.Country" required />
                        </div>
                    </div>
                    <div class="form-group">
                        <label for="age" class="col-sm-2 control-label">Age:</label>
                        <div class="col-sm-10">
                            <input type="text" class="form-control" id="age" placeholder="please enter your age" data-ng-model="newcustomer.Age" required />
                        </div>
                    </div>
                    <br />
                    <div class="form-group">
                        <div class="col-sm-offset-2 col-sm-10">
                            <input type="submit" value="Add" data-ng-click="add()" data-ng-disabled="!addCustomer.$valid" class="btn btn-primary" />
                            <input type="button" value="Cancel" data-ng-click="toggleAdd()" class="btn btn-primary" />
                        </div>
                    </div>
                    <br />
                </form>
            </div>
        </div>
        <div class="row">
            <div class="col-md-12">
                <br />
                <br />
            </div>
        </div>
        <div class="row">
            <div class="col-md-12">
                <div class="table-responsive">
                    <table class="table table-bordered table-hover" style="800px">
                        <tr>
                            <th>#</th>
                            <td>FirstName</td>
                            <th>LastName</th>
                            <th>Address</th>
                            <th>City</th>
                            <th>PostalCode</th>
                            <th>Country</th>
                        </tr>
                        <tr data-ng-repeat="customer in customers">
                            <td><strong data-ng-hide="customer.editMode">{{ customer.Id }}</strong></td>
                            <td>
                                <p data-ng-hide="customer.editMode">{{ customer.Name }}</p>
                                <input data-ng-show="customer.editMode" type="text" data-ng-model="customer.Name" />
                            </td>
                            <td>
                                <p data-ng-hide="customer.editMode">{{ customer.Address }}</p>
                                <input data-ng-show="customer.editMode" type="text" data-ng-model="customer.Address" />
                            </td>
                            <td>
                                <p data-ng-hide="customer.editMode">{{ customer.City }}</p>
                                <input data-ng-show="customer.editMode" type="text" data-ng-model="customer.City" />
                            </td>
                            <td>
                                <p data-ng-hide="customer.editMode">{{ customer.Country }}</p>
                                <input data-ng-show="customer.editMode" type="text" data-ng-model="customer.Country" />
                            </td>
                            <td>
                                <p data-ng-hide="customer.editMode">{{ customer.Age }}</p>
                                <input data-ng-show="customer.editMode" type="text" data-ng-model="customer.Age" />
                            </td>
                            <td>
                                <p data-ng-hide="customer.editMode"><a data-ng-click="toggleEdit(customer)" href="javascript:;">Edit</a> | <a data-ng-click="deletecustomer(customer)" href="javascript:;">Delete</a></p>
                                <p data-ng-show="customer.editMode"><a data-ng-click="save(customer)" href="javascript:;">Save</a> | <a data-ng-click="toggleEdit(customer)" href="javascript:;">Cancel</a></p>
                            </td>
                        </tr>
                    </table>
                    <hr />
                </div>
            </div>
        </div>
        <div id="mydiv" data-ng-show="loading">
            <img src="Images/ajax-loader.gif" class="ajax-loader" />
        </div>
    </div>

    10. 跑起来,享受角球的乐趣,输出的结果是: 输出 结论 我认为这篇文章对那些想要先学习AngularJS, WebApi, Twitter-Bootstrap, SPA和SQL-SERVER数据的初学者非常有帮助。我的英语不是很好,如果我有什么错误,请原谅。谢谢你的耐心。 本文转载于:http://www.diyabc.com/frontweb/news15860.html

  • 相关阅读:
    Python挂载杂记
    Python Log的使用, 模块化
    Python实现图片长宽比例缩放和填充
    系统监控与硬盘
    linux基础三
    linux基础二
    linux基础一
    网络基础
    操作系统
    计算机硬件基础
  • 原文地址:https://www.cnblogs.com/Dincat/p/13489977.html
Copyright © 2020-2023  润新知