MVC Angular JS和WCF Rest服务用于主/细节HTML网格
介绍 您还可以查看我以前的文章,这些文章是关于使用MVC和WCF REST Service的AngularJs。 http://www.codeproject.com/articles/893821/mvc-angularjs-and-wcf-rest-service-for-mind-reader http://www.codeproject.com/articles/988680/angular-js-filter-sorting-and-animation-using-mvc http://www.codeproject.com/articles/988648/angular-js-shopping-cart-using-mvc-and-wcf-rest|0>>>> 在本文中,我们将使用Angular JS和WCF创建一个主细节网格。在这篇文章中我们将看到。 1),如何创建WCF Rest服务并从数据库中检索数据。 2),如何安装Angular JS包到我们的MVC应用程序。 3),如何创建Angular JS应用程序来创建我们自己的主细节网格。 4),如何在Angular JS中使用WCS服务,并将主数据和细节数据绑定到MVC视图中。 注意:前提→Visual Studio 2013(如果你还没有Visual Studio 2013,你可以从微软网站http://www.visualstudio.com/en-us/products/visual-studio-community-vs下载)。 这里我们可以看到一些基本的和参考的链接 Windows Communication Foundation (WCF): WCF是用于构建面向服务的应用程序的框架。 面向服务的应用——使用协议,服务可以在网络上共享和使用。 例如,现在我们正在做一个项目,我们需要创建一些通用的数据库功能,这些功能需要在多个项目中使用,项目在不同的地方,并通过互联网连接。 在这种情况下,我们可以创建一个WCF服务,并且可以在WCF服务类中编写所有公共数据库功能。我们可以在IIS中部署WCF,并使用应用程序中的URL来执行数据库功能。在代码部分,让我们看看如何创建WCF REST服务,并在Angular JS应用程序中使用它。 , 如果你有兴趣阅读更多关于WCF的细节,请通过这个链接。 https://msdn.microsoft.com/en-in/library/dd203052.aspx 角JS 我们可能知道什么是MVVM(模型、视图、视图模型)和MVC(模型、视图和控制器)。Angular JS是一个纯基于HTML CSS和JavaScript的JavaScript框架。 类似MVC和MVVM模式Angular JS MVW模式(模型视图等等) 在我们的示例中,我使用了模型、视图和服务。在代码部分,让我们看看如何在MVC应用程序中安装和创建Angular JS。 如果你有兴趣阅读更多关于Angular JS的细节,请点击这个链接。 http://www.w3schools.com/angular/default.asp 使用的代码 创建数据库和表:我们将创建一个订单主表和订单详细信息表,用于主/详细网格数据绑定。 下面是创建数据库、表和示例插入查询的脚本。 在你的SQL服务器上运行这个脚本,我用的是SQL Server 2008 R2。 隐藏,收缩,复制Code
--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服务: Open Visual Studio 2013 ->选择文件-新建-项目-选择WCF服务应用程序->选择您的项目路径并命名您的WCF服务,然后单击ok。 一旦我们创建了WCF服务,我们就可以看到“IService”。CS”和“Service1。解决方案资源管理器中的svc ",如下所示。 IService.CS——比;在“IService。“我们可以看到3个合同默认 (ServiceContract)——比;描述服务可用的方法或任何操作。服务契约是一个接口,可以使用操作契约属性在服务接口内部声明方法。 (OperationContract)→类似于web服务[WEBMETHOD] (DataContract)→描述客户端和服务之间的数据交换。 (ServiceContract) 下面的代码将为所有IService.CS文件自动创建。我们可以在这里修改和编写我们自己的代码。 隐藏,收缩,复制Code
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” 在这里,我们可以看到我们已经将所有表列名声明为数据成员。 隐藏,收缩,复制Code
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; } } }
服务合同 在操作契约中,我们可以看到“WebInvoke”和“WebGet”,这是在REST Serivce中从数据库中检索数据。 RequestFormat = WebMessageFormat.Json, ,,,,,,,,,ResponseFormat = WebMessageFormat.Json, 这里我们可以看到请求和响应格式,这里我使用了Json格式。 JavaScript对象表示法是一种轻量级数据交换格式 UriTemplate——比;是我们的方法名,这里我们的方法返回类型是List。 这里我将3个方法声明为“GetOrderMaster”、“SearchOrderMaster”和“OrderDetails”。在“OrderDetails”方法中,Order_No参数用于根据订单号获取订单细节过滤器。 隐藏,收缩,复制Code
[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→完整的源代码 隐藏,收缩,复制Code
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并单击next。 ; 单击新连接 在这里,我们可以选择我们的数据库服务器名称,并输入您的DB服务器SQL服务器身份验证用户ID和密码。我们已经将数据库创建为“OrderManagement”,因此可以选择数据库并单击ok。 单击next并选择需要使用的表。在我们的示例中,我们需要使用“OrderMasters”和“orderDetails”。选择这两个表并单击finish。 现在我们可以看到,我们已经创建了OrderManagementModel。 Service1.SVC 在“Service.SVC。CS“实现了IService接口,覆盖并定义了操作契约的所有方法。 例如,在这里我们可以看到,我在Service1类中实现了IService1,为我们的实体模型创建了对象,在GetOrderMaster中使用LINQ查询,我从OrderMasters表中选择了数据,结果被添加到列表中。 隐藏,收缩,复制Code
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。-完整的源代码 隐藏,收缩,复制Code
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; } } }
. config: 在WCF项目中“Web.Config” 改变 1) Change <add binding="basicHttpsBinding" scheme="https" />add binding="webHttpBinding" scheme="http" /> 2)代替行为来 隐藏,复制Code
<endpointBehaviors> <behavior> <webHttphelpEnabled="True"/> </behavior> </endpointBehaviors> </behaviors>
, 运行WCF服务:->现在我们已经创建了WCF Rest服务,让我们运行并测试我们的服务。 在我们的服务URL中,我们可以添加我们的方法名,我们可以看到来自数据库的JSON结果数据。 现在我们已经完成了WCF,现在是时候创建我们的MVC Angular JS应用程序了。 我们可以向现有的项目中添加新的项目,并创建新的MVC web应用程序,如下所示。 右键单击您的解决方案,并单击添加新项目->输入项目名称并单击OK。 选择MVC并单击ok 现在我们已经创建了MVC应用程序,现在是时候添加我们的WCF服务并将Angular JS包安装到我们的解决方案中了。 添加WCF服务:右键单击MVC解决方案,然后单击添加->单击服务引用。 输入您的WCF URL并单击GO .这里我的WCF URL是http://localhost:2505/Service1.svc 添加您的名字并单击ok。 现在我们已经成功地将WCF服务添加到我们的MVC应用程序中 安装Angular JS包的步骤 右键单击您的MVC项目并单击->NuGet包管理 选择在线搜索Angular JS。选择AngularJs并单击Install。 现在我们已经在MVC项目中安装了AngularJS包。现在让我们创建Angular Js Modules.js Controllers.js Services.js 创建Angular Js脚本文件的步骤: 右键单击Script文件夹,创建你自己的文件夹来创建Angular Js模型/控制器和服务JavaScript。在脚本文件夹中添加三个JavaScript文件并命名为模块。js,控制器。js和服务,js如下。 js:这里我们添加了对Angular.js javascript的引用,并创建了一个名为“RESTClientModule”的Angular模块。 隐藏,复制Code
/// <reference path="../angular.js" /> /// <reference path="../angular.min.js" /> var app; (function () { app = angular.module("RESTClientModule", []); })();
服务。这里我们添加了对Angular.js JavaScript和模块.js的引用。 这里我们给我们的服务命名,并在controller .js中使用这个名称。这里,对于Angular服务,我将其命名为“AngularJs_WCFService”。您可以提供自己的名称,但在control .js中更改名称时要小心。这里我们可以看到方法,因为我已经传递了我们的webservice的URL。 隐藏,复制Code
/// <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("http://localhost:2505/Service1.svc/GetOrderMaster"); }; //Search Order Master Records this.getSearchOrder = function (OrderNO) { return $http.get("http://localhost:2505/Service1.svc/SearchOrderMaster/" + OrderNO); } //Search Order Details Records this.getOrderDetail = function (OrderNO) { return $http.get("http://localhost:2505/Service1.svc/OrderDetails/" + OrderNO); } });
控制器。js:这里我们添加了Angular.js JavaScript和我们的Module.js和Services.js的引用。服务也一样。对于控制器,我将其命名为“AngularJs_WCFController”。 首先,我获取当前数据并使用$scope.date存储日期。 我创造了一种方法通过GetOrderMasters()和使用服务模块,我获得了生成的订单主表,并将结果绑定到“$scope”。OrderMastersDisp = pl.data”。就像这样,我们创建了所有剩下的方法。 隐藏,收缩,复制Code
/// <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控件和视图来显示结果。 添加控制器: 右键单击Controllers->Add Controller ->选择MVC 5 Controller -Empty ->单击Add 更改控制器名称,这里我将名称指定为“OrderManagementController”,然后单击ok。 添加视图:右键单击控制器索引,然后单击添加视图。 将视图命名为“索引”。 在视图中设计你的页面和参考的角度。js,模块。js,服务。js和控制器。js。 在Angular JS中,我们使用{{}}来绑定或显示数据。 , 这里我们可以看到,首先我创建了一个表格。 首先在表中我使用了data-ng-controller="AngularJs_WCFController",在这里我们可以看到data-ng-controller将被用于绑定数据。的控制器ller输出html表。 使用<tbody data-ng-repeat="detail in OrderDetailDisp">我们可以使用<td> span>{{order.Order_No}}</span></td>绑定表中的所有数据。我们已经为内部表创建了同样的内容。当用户单击Details按钮时,我将显示订单详细信息表。 隐藏,收缩,复制Code
<htmldata-ng-app="RESTClientModule"> @{ ViewBag.Title = "SHANU AngularJs / WCF and Master Detail Grid"; } <body> <imgsrc="~/Images/blank.gif"alt=""width="1"height="10"/> <tablewidth="99%"style=" border-bottom:3px solid #3273d5;"> <tr> <tdwidth=" 250"> <tablewidth="99%"> <tr> <td> Welcome Mr. {{'SHANU'}} . </td> </tr> </table> </td> <tdclass="style1"align="center"> <h3>Order Master / Detail Grid using Angular JS and WCF in MVC :)</h3> </td> <tdalign="right"> <divng-controller="AngularJs_WCFController"> Today Date is : {{date | date:'yyyy-MM-dd'}} </div> </td> </tr> </table> <imgsrc="~/Images/blank.gif"alt=""width="1"height="10"/> <tableid="tblContainer"data-ng-controller="AngularJs_WCFController"style='width: 99%;table-layout:fixed;'> <tr> <td> <tablestyle=" background-color:#ECF3F4; border: solid 2px #3273d5; padding: 5px;width: 99%;table-layout:fixed;"> <trstyle="height: 30px; background-color:#336699 ; color:#FFFFFF ;"> <thwidth="60"></th> <th>Order No</th> <th>Table ID</th> <th>Notes</th> <th>Order DATE</th> <th>Waiter Name</th> <th></th> </tr> <tbodydata-ng-repeat="order in OrderMastersDisp"> <tr> <tdwidth="60"> <inputtype="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> <trid={{order.Order_No}} ng-hide="order.isRowHidden"ng-init="get(order)"> <td> </td> <tdcolspan="6"> <tablestyle=" background-color:#ECF3F4; border: solid 2px #3273d5; padding: 5px;width: 99%;table-layout:fixed;"> <trstyle="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> <tbodydata-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> <scriptsrc="~/Scripts/angular.js"></script> <scriptsrc="~/Scripts/ShanuAngularScript/Modules.js"></script> <scriptsrc="~/Scripts/ShanuAngularScript/Services.js"></script> <scriptsrc="~/Scripts/ShanuAngularScript/Controllers.js"></script>
运行你的程序 在这里我们可以看到,当我运行这个程序时,首先在表中显示了订单主记录。 当用户点击Detail按钮时,我将在下一行显示订单的详细信息。 支持浏览器:Chrome和Firefox。 历史 Version1.0 - 2015-05-28 本文转载于:http://www.diyabc.com/frontweb/news17325.html