65.9K
CodeProject 正在变化。 阅读更多。
Home

MVC Angular JS 和 WCF REST 服务用于主/详细信息 HTML 网格

starIconstarIconstarIconstarIconstarIcon

5.00/5 (6投票s)

2015 年 5 月 28 日

CPOL

8分钟阅读

viewsIcon

36594

downloadIcon

3006

MVC、AngularJS 和 WCF REST 服务用于主/详细信息 HTML 网格

引言

您还可以查看我之前关于使用 MVC 和 WCF REST 服务进行 AngularJs 的文章。

在本文中,我们将使用 Angular JS 和 WCF 创建一个主详细信息网格。在本文中,我们将看到

  1. 如何创建 WCF REST 服务并从数据库检索数据
  2. 如何将 Angular JS 包安装到我们的 MVC 应用程序
  3. 如何创建我们的 Angular JS 应用程序来创建我们自己的主详细信息网格
  4. 如何使用 Angular JS 中的 WCS 服务并将主详细信息和详细信息的数据绑定到我们的 MVC 视图

注意:先决条件 -> Visual Studio 2013(如果您没有 Visual Studio 2013,可以从 Microsoft 网站此处下载)。

在这里,我们可以看到一些基本和参考链接

  • Windows Communication Foundation (WCF):WCF 是一个用于构建面向服务应用程序的框架。
  • 面向服务应用程序:使用协议,服务可以在网络上共享和使用。

例如,让我们考虑现在我们正在做一个项目,我们需要创建一些通用的数据库函数,这些函数需要被多个项目使用,并且这些项目位于不同的地方并通过互联网连接。

在这种情况下,我们可以创建一个 WCF 服务,并将所有通用的数据库函数写在我们的 WCF 服务类中。我们可以将 WCF 部署在 IIS 中,并在我们的应用程序中使用 URL 来执行 DB 函数。在代码部分,让我们看看如何创建 WCF REST 服务并在我们的 Angular JS 应用程序中使用它。

如果您有兴趣阅读更多关于 WCF 的详细信息,请访问此链接

Angular JS

我们可能知道 MVVM(模型、视图、视图模型)和 MVC(模型、视图和控制器)是什么。Angular JS 是一个纯粹基于 HTML、CSS 和 JavaScript 的 JavaScript 框架。

与 MVC 和 MVVM 模式类似,Angular JS 采用 MVW(模型视图随便)模式。

在我们的示例中,我使用了模型、视图和服务。在代码部分,让我们看看如何在我们的 MVC 应用程序中安装和创建 Angular JS。

如果您有兴趣阅读更多关于 Angular JS 的详细信息,请访问此链接

Using the Code

创建数据库和表

我们将创建一个订单主表和订单详细表,用于主/详细信息网格数据绑定。

以下是用于创建数据库、表和示例文本插入查询的脚本。

在您的 SQL Server 中运行此脚本。我使用的是 SQL Server 2008 R2。

-- create DataBase

Create Database OrderManagement

-- Create OrderMasters Table

CREATE TABLE [dbo].[OrderMasters]( 
[Order_No] [varchar](20) NOT NULL, 
[Table_ID] [varchar](20) NOT NULL, 
[Description] [varchar](200) NOT NULL, 
[Order_DATE] [datetime] NOT NULL, 
[Waiter_Name] [varchar](20) NOT NULL
CONSTRAINT [PK_OrderMasters] PRIMARY KEY CLUSTERED 
( 
   [Order_No] ASC 
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, _
 IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY] 
) ON [PRIMARY] 

-- Insert OrderMasters sample data

INSERT INTO [OrderMasters] 
          ([Order_No],[Table_ID] ,[Description],[Order_DATE],[Waiter_Name]) 
    VALUES 
          ('ORD_001','T1','Order for Table T1',GETDATE(),'SHANU' ) 
    
INSERT INTO [OrderMasters] 
          ([Order_No],[Table_ID] ,[Description],[Order_DATE],[Waiter_Name]) 
    VALUES 
           ('ORD_002','T2','Order for Table T2',GETDATE(),'Afraz' ) 
         
INSERT INTO [OrderMasters] 
          ([Order_No],[Table_ID] ,[Description],[Order_DATE],[Waiter_Name]) 
     VALUES 
             ('ORD_003','T3','Order for Table T3',GETDATE(),'Afreen') 
            
CREATE TABLE [dbo].[OrderDetails]( 
  [Order_Detail_No] [varchar](20) NOT NULL, 
 [Order_No] [varchar](20) CONSTRAINT  fk_OrderMasters FOREIGN KEY REFERENCES _
                                      OrderMasters(Order_No), 
 [Item_Name] [varchar](20) NOT NULL,  
 [Notes] [varchar](200) NOT NULL, 
[QTY]  INT NOT NULL, 
 [Price] INT NOT NULL 
 CONSTRAINT [PK_OrderDetails] PRIMARY KEY CLUSTERED
( 
    [Order_Detail_No] ASC 

)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, _
 ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY] 
) ON [PRIMARY] 

-- Now let’s insert the 3 items for the above Order No 'Ord_001'. 

INSERT INTO [OrderDetails] 
          ([Order_Detail_No],[Order_No],[Item_Name],[Notes],[QTY] ,[Price]) 
   VALUES 
          ('OR_DT_001','ORD_001','Ice Cream','Need very Cold',2 ,160) 

INSERT INTO [OrderDetails] 
          ([Order_Detail_No],[Order_No],[Item_Name],[Notes],[QTY] ,[Price]) 
   VALUES 
          ('OR_DT_002','ORD_001','Coffee','Hot and more Suger',1 ,80)  

          INSERT INTO [OrderDetails] 
          ([Order_Detail_No],[Order_No],[Item_Name],[Notes],[QTY] ,[Price]) 
   VALUES 
          ('OR_DT_003','ORD_001','Burger','Spicy',3 ,140) 
         
          INSERT INTO [OrderDetails] 
          ([Order_Detail_No],[Order_No],[Item_Name],[Notes],[QTY] ,[Price]) 
   VALUES 
          ('OR_DT_004','ORD_002','Pizza','More Chees and Large',1 ,350) 
         
          INSERT INTO [OrderDetails] 
          ([Order_Detail_No],[Order_No],[Item_Name],[Notes],[QTY] ,[Price]) 
   VALUES 
          ('OR_DT_005','ORD_002','Cola','Need very Cold',3 ,50) 
         
          INSERT INTO [OrderDetails] 
          ([Order_Detail_No],[Order_No],[Item_Name],[Notes],[QTY] ,[Price]) 
   VALUES 
          ('OR_DT_006','ORD_003','IDLY','Hot',3 ,40) 

          INSERT INTO [OrderDetails] 
          ([Order_Detail_No],[Order_No],[Item_Name],[Notes],[QTY] ,[Price]) 
   VALUES 
          ('OR_DT_007','ORD_003','Thosa','Hot',3 ,50) 

-- To Select and test Order Master and Details

Select * FROM OrderMasters

Select * From OrderDetails

2)创建 WCF REST 服务

打开 Visual Studio 2013 -> 选择 **文件** - **新建** - **项目** – 选择 **WCF 服务应用程序** -> 选择您的项目路径并命名您的 WCF 服务,然后单击 **确定**。

创建 WCF 服务后,我们将在解决方案资源管理器中看到“IService.CS”和“Service1.svc”,如下所示。

IService.CS - > 在“IService.CS”中,我们默认可以看到三个协定。

  1. [ServiceContract] - > 描述了服务可用的方法或任何操作。服务协定是一个接口,并且可以使用 Operation Contract 属性在服务接口内声明方法。
  2. [OperationContract] -> 类似于 Web 服务的 [WEBMETHOD]
  3. [DataContract] - > 描述了客户端和服务之间的数据交换。
  4. [ServiceContract]

以下代码将自动为所有 IService.CS 文件创建。我们可以在此处更改和编写自己的代码。

    public interface IService1
    {
        [OperationContract]
        string GetData(int value);

        [OperationContract]
        CompositeType GetDataUsingDataContract(CompositeType composite);

        // TODO: Add your service operations here
    }

 // Use a data contract as illustrated in the sample below to add composite types 
 // to service operations.

    [DataContract]
    public class CompositeType
    {
        bool boolValue = true;
        string stringValue = "Hello ";

        [DataMember]
        public bool BoolValue
        {
            get { return boolValue; }
            set { boolValue = value; }
        }

        [DataMember]
        public string StringValue
        {
            get { return stringValue; }
            set { stringValue = value; }
        }
    }

数据合同

在我们的示例中,我们需要同时获取订单主信息和订单详细信息,所以我创建了两个数据协定,“OrderMasterDataContract”和“OrderDetailDataContract”。

在这里,我们可以看到我们已经将所有表列名声明为数据成员。

public class OrderDataContract
    {
        [DataContract]
        public class OrderMasterDataContract
        {
            [DataMember]
            public string Order_No { get; set; }
            [DataMember]
            public string Table_ID { get; set; }
            [DataMember]
            public string Description { get; set; }
            [DataMember]
            public string Order_DATE { get; set; }
            [DataMember]
            public string Waiter_Name { get; set; }       
        }

        [DataContract]
        public class OrderDetailDataContract
        {
            [DataMember]
            public string Order_Detail_No { get; set; }
            [DataMember]
            public string Order_No { get; set; }
            [DataMember]
            public string Item_Name { get; set; }
            [DataMember]
            public string Notes { get; set; }
            [DataMember]
            public string QTY { get; set; }
            [DataMember]
            public string Price { get; set; }
        }
    }

服务合同

在“Operation Contract”中,我们可以看到“WebInvoke”和“WebGet”,它们用于在 REST 服务中从数据库检索数据。

RequestFormat = WebMessageFormat.Json,

           ResponseFormat = WebMessageFormat.Json,

在这里,我们可以看到在请求和响应格式中,我都使用了 Json 格式。

JSON - > JavaScript Object Notation 是一种轻量级数据交换格式。

UriTemplate - > 是我们的方法名称,在这里,我们的方法返回类型是 List

在这里,我声明了三个方法:“GetOrderMaster”、“SearchOrderMaster”和“OrderDetails”。“GetOrderMaster”方法用于获取订单主记录。“OrderDetails”方法中,Order_No 参数用于按订单号过滤获取订单详细信息。

[ServiceContract]
   public interface IService1
    {
        [OperationContract]
        [WebInvoke(Method = "GET",
           RequestFormat = WebMessageFormat.Json,
           ResponseFormat = WebMessageFormat.Json,
           UriTemplate = "/GetOrderMaster/")]

        List<OrderDataContract.OrderMasterDataContract> GetOrderMaster();

        [OperationContract]
        [WebGet(RequestFormat = WebMessageFormat.Json,
           ResponseFormat = WebMessageFormat.Json,
           UriTemplate = "/SearchOrderMaster/{Order_No}")]

        OrderDataContract.OrderMasterDataContract SearchOrderMaster(string Order_No);

        [OperationContract]
        [WebInvoke(Method = "GET",
           RequestFormat = WebMessageFormat.Json,
           ResponseFormat = WebMessageFormat.Json,
           UriTemplate = "/OrderDetails/{Order_No}")]
        List<OrderDataContract.OrderDetailDataContract> OrderDetails(string Order_No);
}

Iservice.Cs -> 完整源代码

using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.ServiceModel.Web;
using System.Text;
namespace Shanu_WCFDBService
{
    // NOTE: You can use the "Rename" command on the "Refactor" menu 
    // to change the interface name "IService1" in both code and config file together.

    [ServiceContract]
    public interface IService1
    {
        [OperationContract]
        [WebInvoke(Method = "GET",
           RequestFormat = WebMessageFormat.Json,
           ResponseFormat = WebMessageFormat.Json,
           UriTemplate = "/GetOrderMaster/")]

        List<OrderDataContract.OrderMasterDataContract> GetOrderMaster();

        [OperationContract]
        [WebGet(RequestFormat = WebMessageFormat.Json,
           ResponseFormat = WebMessageFormat.Json,
           UriTemplate = "/SearchOrderMaster/{Order_No}")]
        OrderDataContract.OrderMasterDataContract SearchOrderMaster(string Order_No); 

        [OperationContract]
        [WebInvoke(Method = "GET",
           RequestFormat = WebMessageFormat.Json,
           ResponseFormat = WebMessageFormat.Json,
           UriTemplate = "/OrderDetails/{Order_No}")]
        List<OrderDataContract.OrderDetailDataContract> OrderDetails(string Order_No);
    }

    public class OrderDataContract
    {
        [DataContract]
        public class OrderMasterDataContract
        {
            [DataMember]
            public string Order_No { get; set; }

            [DataMember]
            public string Table_ID { get; set; }

            [DataMember]
            public string Description { get; set; }

            [DataMember]
            public string Order_DATE { get; set; }

            [DataMember]
            public string Waiter_Name { get; set; }      
        }

        [DataContract]
        public class OrderDetailDataContract
        {
            [DataMember]
            public string Order_Detail_No { get; set; }

            [DataMember]
            public string Order_No { get; set; }

            [DataMember]
            public string Item_Name { get; set; }

            [DataMember]
            public string Notes { get; set; }

            [DataMember]
            public string QTY { get; set; }

            [DataMember]
            public string Price { get; set; }
        }
    }
}

使用 ADO.NET 实体数据模型添加数据库

右键单击您的 WCF 项目,选择 **添加新项** -> 选择 **ADO.NET 实体数据模型**,然后单击 **添加**。

选择 **EF Designer 从数据库**,然后单击 **下一步**。

;

单击 新建连接

在这里,我们可以选择我们的数据库服务器名称,并输入您的 DB 服务器 SQL Server 身份验证用户名和密码。我们已经创建了名为“OrderManagement”的数据库,所以我们可以选择数据库并单击 **确定**。

单击 **下一步**,然后选择我们需要使用的表。在我们的示例中,我们需要使用“OrderMasters”和“orderDetails”。选择这两个表,然后单击 **完成**。

在这里,我们可以看到现在我们已经创建了 OrderManagementModel

Service1.SVC

Service.SVC.CS”实现了 IService 接口,并重写和定义了所有 Operation Contract 方法。

例如,这里我们可以看到我在 Service1 类中实现了 IService1。创建了我们实体模型的对象,并在 GetOrderMaster 中使用 LINQ 查询,我从 OrderMasters 表中选择数据,并将结果添加到列表中。

public class Service1 : IService1
    {
        OrderManagementEntities OME;
        public Service1()  
        {
            OME = new OrderManagementEntities();  
        }
        public List<OrderDataContract.OrderMasterDataContract> GetOrderMaster()  
        {
           var query = (from a in OME.OrderMasters 
                        select a).Distinct();
           List<OrderDataContract.OrderMasterDataContract> orderMasterList = 
                                  new List<OrderDataContract.OrderMasterDataContract>();
            query.ToList().ForEach(rec =>  
            {
                orderMasterList.Add(new OrderDataContract.OrderMasterDataContract 
                {
                   Order_No = Convert.ToString(rec.Order_No),
                   Table_ID = rec.Table_ID,
                   Description = rec.Description,
                   Order_DATE =  Convert.ToString(rec.Order_DATE),
                   Waiter_Name = rec.Waiter_Name
               });  
           });
            return orderMasterList;  
       }
}

“Service.SVC.CS” - 完整源代码

using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.ServiceModel.Web;
using System.Text;
using Shanu_WCFDBService.Model;

namespace Shanu_WCFDBService
{
public class Service1 : IService1
    {
        OrderManagementEntities OME;

        public Service1()  
        {
            OME = new OrderManagementEntities();  
       }

        public List<OrderDataContract.OrderMasterDataContract> GetOrderMaster()  
       {
           var query = (from a in OME.OrderMasters  
                        select a).Distinct();

           List<OrderDataContract.OrderMasterDataContract> orderMasterList = 
                                    new List<OrderDataContract.OrderMasterDataContract>();  

            query.ToList().ForEach(rec =>  
            {
                orderMasterList.Add(new OrderDataContract.OrderMasterDataContract 
                {
                   Order_No = Convert.ToString(rec.Order_No),
                   Table_ID = rec.Table_ID,
                   Description = rec.Description,
                   Order_DATE =  Convert.ToString(rec.Order_DATE),
                   Waiter_Name = rec.Waiter_Name
               });  
           });
            return orderMasterList;  
       }

        public OrderDataContract.OrderMasterDataContract SearchOrderMaster(string Order_No)
        {
 OrderDataContract.OrderMasterDataContract OrderMaster= 
                        new OrderDataContract.OrderMasterDataContract();

            try
            {
                var query = (from a in OME.OrderMasters
                             where a.Order_No.Equals(Order_No)
                             select a).Distinct().FirstOrDefault();

                    OrderMaster.Order_No = Convert.ToString(query.Order_No);
                    OrderMaster.Table_ID = query.Table_ID;
                    OrderMaster.Description = query.Description;
                    OrderMaster.Order_DATE =  Convert.ToString(query.Order_DATE);
                    OrderMaster.Waiter_Name = query.Waiter_Name;
            }

            catch (Exception ex)
            {
                throw new FaultException<string>
                       (ex.Message);
            }
            return OrderMaster;
        }

        public List<OrderDataContract.OrderDetailDataContract> OrderDetails(string Order_No)
        {
            var query = (from a in OME.OrderDetails
                         where a.Order_No.Equals(Order_No)
                         select a).Distinct();

            List<OrderDataContract.OrderDetailDataContract> OrderDetailList = 
                                   new List<OrderDataContract.OrderDetailDataContract>();

            query.ToList().ForEach(rec =>
            {
                OrderDetailList.Add(new OrderDataContract.OrderDetailDataContract
                {
                    Order_Detail_No = Convert.ToString(rec.Order_Detail_No),
                    Order_No = Convert.ToString(rec.Order_No),
                    Item_Name = rec.Item_Name,
                    Notes = rec.Notes,
                    QTY = Convert.ToString(rec.QTY),
                    Price = Convert.ToString(rec.Price)
                });
            });
            return OrderDetailList;
        }
    }
}

Web.Config

在 WCF 项目的“Web.Config”中。

  1. <add binding="basicHttpsBinding" scheme="https" /> 更改为 <add binding="webHttpBinding" scheme="http" />
  2. </behaviors> 替换为
<endpointBehaviors>
        <behavior>
          <webHttp helpEnabled="True"/>
        </behavior>
      </endpointBehaviors>
    </behaviors>

运行 WCF 服务

既然我们已经创建了 WCF REST 服务,让我们运行并测试我们的服务。

在我们的服务 URL 中,我们可以添加我们的方法名称,并看到来自数据库的 JSON 结果数据。

好了,我们完成了 WCF 部分,现在是时候创建我们的 MVC Angular JS 应用程序了。

我们可以向现有项目添加新项目,并创建一个新的 **MVC Web 应用程序**,如下所示。

右键单击您的解决方案,然后单击 **添加新项目** -> 输入您的项目名称,然后单击 **确定**。

选择 MVC,然后单击 确定

现在我们已经创建了 MVC 应用程序,是时候添加我们的 WCF 服务并向我们的解决方案安装 Angular JS 包了。

添加 WCF 服务:右键单击 **MVC 解决方案**,然后单击 **添加** -> 单击 **服务引用**。

输入您的 WCF URL,然后单击 **GO**。这里,我的 WCF URL 是 https://:2505/Service1.svc

添加您的名字,然后单击 确定

现在我们已成功将 WCF 服务添加到我们的 MVC 应用程序中。

安装 Angular JS 包的步骤

右键单击您的 MVC 项目,然后单击 -> **管理 NuGet 程序包**。

选择 Online,然后搜索 Angular JS。选择 AngularJs,然后单击 安装

现在我们已经将 AngularJS 包安装到了我们的 MVC 项目中。现在让我们创建我们的 Angular Js。

  • Modules.js
  • Controllers.js
  • Services.js

创建 AngularJS 脚本文件的步骤

右键单击 Script 文件夹,创建您自己的文件夹来创建我们的 Angular Js 模型/控制器和服务 JavaScript。在您的script 文件夹中,添加三个 JavaScript 文件,并命名为Modules.jsControllers.jsServices.js,如下所示。

Modules.js:在这里,我们添加 Angular.js JavaScript 的引用,并创建一个名为“RESTClientModule”的 Angular 模块。

/// <reference path="../angular.js" />
/// <reference path="../angular.min.js" /> 
var app;
(function () {
    app = angular.module("RESTClientModule", []);
})();

Services.js:在这里,我们添加 Angular.js JavaScript 和我们的 Module.js 的引用。

在这里,我们为我们的服务命名,并在 controllers.js 中使用此名称。这里,对于 Angular 服务,我将其命名为“AngularJs_WCFService”。您可以自己命名,但要注意在 Controllers.js 中更改名称。这里,我们可以在方法中看到我已经传递了我们 Web 服务的 URL。

/// <reference path="../angular.js" /> 
/// <reference path="../angular.min.js" />  
/// <reference path="Modules.js" />    

app.service("AngularJs_WCFService", function ($http) {
    //Get Order Master Records 
    this.getOrdermaster = function () {
        return $http.get("https://:2505/Service1.svc/GetOrderMaster");
    };

    //Search Order Master Records  
    this.getSearchOrder = function (OrderNO) {
        return $http.get("https://:2505/Service1.svc/SearchOrderMaster/" + OrderNO);
    }

    //Search Order Details Records  
    this.getOrderDetail = function (OrderNO) {
        return $http.get("https://:2505/Service1.svc/OrderDetails/" + OrderNO);
    }
});

Controllers.js:这里,我们添加 Angular.js JavaScript 以及我们的 Module.js 和 Services.js 的引用。与 Services 类似。对于控制器,我将其命名为“AngularJs_WCFController”。

首先,我获取当前日期并使用 $scope.date 存储日期。

我创建了一个名为 GetOrderMasters() 的方法,并使用 Services 模块,获取 Order Master 表的结果,并将结果绑定到“$scope.OrderMastersDisp = pl.data”。同样,我们创建所有其他方法。

/// <reference path="../angular.js" /> 
/// <reference path="../angular.min.js" />  
/// <reference path="Modules.js" />  
/// <reference path="Services.js" />  
app.controller("AngularJs_WCFController", function ($scope, $window, AngularJs_WCFService) { 
        $scope.date = new Date();
    GetOrderMasters();
    //To Get All Records  
    function GetOrderMasters() { 
        var promiseGet = AngularJs_WCFService.getOrdermaster();     
        promiseGet.then(function (pl) {
            $scope.OrderMastersDisp = pl.data          
        },
             function (errorPl) {               
             });
    }
    Hidetables()
    function Hidetables() {      
            $scope.isRowHidden = false;
    }
    $scope.get = function (Order) {     
        if (Order == null) {          
            return;
        }      
        if (Order.isRowHidden == true) {
            Order.isRowHidden = false;
            var promiseGet = AngularJs_WCFService.getOrderDetail(Order.Order_No);
            promiseGet.then(function (pl) {
                $scope.OrderDetailDisp = pl.data
            },
                 function (errorPl) {
                 });
        }
        else {
            Order.isRowHidden = true;
        }         
    }
});

现在,我们已经创建了 Angular Js 模块/控制器和服务。接下来是什么?

创建 MVC Controller 和 View 以显示我们的结果。

添加 Controller

右键单击 **Controllers** -> **添加 Controller** -> 选择 **MVC 5 Controller** – Empty -> 单击 **添加**。

更改 Controller 名称,这里我将其命名为“OrderManagementController”,然后单击 **确定**。

添加视图:右键单击 **Controller Index**,然后单击 **添加视图**。

将视图命名为“Index”。

在视图中设计您的页面,并引用 angular.JsModules.jsServices.jsControllers.js

在 Angular JS 中,我们使用 {{ }} 来绑定或显示数据。

在这里,我们可以看到我首先创建了一个表格,然后是这个表格。

首先,在表格中,我使用了 data-ng-controller="AngularJs_WCFController",这里我们可以看到 data-ng-controller 将用于将控制器的日期绑定到我们的 HTML 表。

使用 <tbody data-ng-repeat="detail in OrderDetailDisp">,我们可以获取所有记录,并使用 <td><span>{{order.Order_No}}</span></td> 将所有数据绑定到表格内部。同样,我们为内部表格创建了。当用户单击 Details 按钮时,我将显示 Order Details 表。

<html data-ng-app="RESTClientModule">
@{
    ViewBag.Title = "SHANU AngularJs /  WCF and Master Detail Grid";
}

<body>
    <img src="~/Images/blank.gif" alt="" width="1" height="10" />
    <table width="99%" style=" border-bottom:3px solid #3273d5;">
        <tr>
            <td width=" 250">
        <table width="99%">
            <tr>
                <td>
                    Welcome Mr. {{'SHANU'}} .
                   </td>           
            </tr>
        </table>
        </td>
        <td class="style1" align="center">
            <h3>Order Master / Detail Grid using Angular JS and WCF in MVC :)</h3>         
        </td>
            <td align="right">
                <div ng-controller="AngularJs_WCFController">
                    Today Date is :
                    {{date | date:'yyyy-MM-dd'}}
                </div>
            </td>
        </tr>
    </table>
    <img src="~/Images/blank.gif" alt="" width="1" height="10" />   
    <table id="tblContainer" data-ng-controller="AngularJs_WCFController" 
     style='width: 99%;table-layout:fixed;'>
        <tr>
            <td>
                <table style=" background-color:#ECF3F4; border: solid 2px #3273d5; 
                       padding: 5px;width: 99%;table-layout:fixed;">
                    <tr style="height: 30px; background-color:#336699 ; color:#FFFFFF ;">
                       <th width="60"></th>
                        <th>Order No</th>
                        <th>Table ID</th>
                        <th>Notes</th>
                        <th>Order DATE</th>
                        <th>Waiter Name</th>
                        <th></th>
                    </tr>
                    <tbody data-ng-repeat="order in OrderMastersDisp">
                        <tr> 
                           <td width="60">
                           <input type="button" id="Detail" 
                           value="Detail" data-ng-click="get(order)" />

                            </td>
                            <td><span>{{order.Order_No}}</span></td>

                            <td><span>{{order.Table_ID}}</span></td>

                            <td><span>{{order.Description}}</span></td>

                            <td><span>{{order.Order_DATE}}</span></td>

                            <td><span>{{order.Waiter_Name}}</span></td>
                            <td></td>
                        </tr>
                        <tr id={{order.Order_No}} ng-hide="order.isRowHidden" 
                                                  ng-init="get(order)">
                            <td>  </td>
                            <td colspan="6">
                                <table style=" background-color:#ECF3F4; 
                                 border: solid 2px #3273d5; padding: 5px;
                                 width: 99%;table-layout:fixed;">
                                   <tr style="height: 30px; background-color:#336699 ; 
                                       color:#FFFFFF ;">
                                        <th>Order No</th>
                                        <th>Order Detail No</th>
                                        <th>Item Name</th>
                                        <th>Comments</th>
                                        <th>QTY</th>
                                        <th>Price</th>
                                   </tr>
                                    <tbody data-ng-repeat="detail in OrderDetailDisp">
                                        <tr>   
                                            <td><span>{{detail.Order_No}}</span></td>
                                            <td><span>{{detail.Order_Detail_No}}</span></td>
                                           <td><span>{{detail.Item_Name}}</span></td>
                                           <td><span>{{detail.Notes}}</span></td>
                                            <td><span>{{detail.QTY}}</span></td>
                                            <td><span>{{detail.Price}}</span></td>
                                        </tr>
                                    </tbody>
                                </table>
                            </td>
                        </tr>
                    </tbody>
                </table>
            </td>
        </tr>
    </table>
</body></html>
<script src="~/Scripts/angular.js"></script>
<script src="~/Scripts/ShanuAngularScript/Modules.js"></script>
<script src="~/Scripts/ShanuAngularScript/Services.js"></script>
<script src="~/Scripts/ShanuAngularScript/Controllers.js"></script>

运行您的程序

这里,我们可以看到当运行程序时,首先,我在表格中显示 Order Master 记录。

当用户单击 Detail 按钮时,我将在下一行显示订单的详细信息。

支持的浏览器:Chrome 和 Firefox

历史

  • 2015 年 5 月 28 日:版本 1.0
© . All rights reserved.