MVC中实现订单表和订单详细表联动新增的一种方法
生活随笔
收集整理的這篇文章主要介紹了
MVC中实现订单表和订单详细表联动新增的一种方法
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
直接上視圖的代碼:
html代碼表格:
View Code 1 <body> 2 <input type="button" value="保存" onclick="save()" /> 3 <hr /> 4 客戶: 5 <input type="text" id="kehuxingming" /> 6 <hr /> 7 <table id="detailsTable"> 8 <tr> 9 <td>產(chǎn)品ID:</td> 10 <td> 11 <input type="text" name="productId" /></td> 12 <td>名稱:</td> 13 <td> 14 <input type="text" name="prductName" /></td> 15 <td>數(shù)量:</td> 16 <td> 17 <input type="text" name="quantity" /></td> 18 </tr> 19 <tr> 20 <td>產(chǎn)品ID:</td> 21 <td> 22 <input type="text" name="productId" /></td> 23 <td>名稱:</td> 24 <td> 25 <input type="text" name="prductName" /></td> 26 <td>數(shù)量:</td> 27 <td> 28 <input type="text" name="quantity" /></td> 29 </tr> 30 </table> 31 </body>js代碼:
View Code 1 <script src='@Url.Content("~/Scripts/jquery-1.7.1.min.js")'></script> 2 <script src='@Url.Content("~/Scripts/postify.js")'></script> 3 <script> 4 //保存方法 5 function save() { 6 7 //聲明局部變量,構(gòu)造json格式數(shù)據(jù) 8 var data = {}; 9 //為data動(dòng)態(tài)添加屬性 10 data.model = {}; 11 data.detailsList = []; 12 13 //存放訂單表數(shù)據(jù) 14 data.model.KehuXingming = $("#kehuxingming").val(); 15 16 //each隱式迭代 17 $.each($("#detailsTable tr"), function (i, o) { 18 19 //將dom元素轉(zhuǎn)換為Jquery對(duì)象 20 var obj = $(o); 21 //構(gòu)造訂單詳細(xì)表數(shù)據(jù)數(shù)組:[{}] 22 23 var detail = {}; 24 //用find方法找到input標(biāo)簽對(duì)應(yīng)產(chǎn)品屬性,賦值給detail動(dòng)態(tài)創(chuàng)建的屬性 25 detail.ProductID = obj.find("input[name='productId']").val(); 26 detail.ProductName = obj.find("input[name='prductName']").val(); 27 detail.Quantity = obj.find("input[name='quantity']").val(); 28 29 //將detail加入data.detailList中 30 data.detailsList.push(detail); 31 32 }); 33 //此處獲得構(gòu)造出來(lái)的data要經(jīng)過(guò)一個(gè)postify.js的特殊處理,后臺(tái)才能接收到這個(gè)構(gòu)造成json格式的數(shù)據(jù) 34 $.post('@Url.Action("SaveSaleOrder")', $.postify(data), function (html) { 35 if (html.result) { 36 alert("成功"); 37 } else { 38 alert(html.msg); 39 } 40 }); 41 } 42 </script>js幫助:
View Code 1 $.postify = function (value) { 2 var result = {}; 3 4 var buildResult = function (object, prefix) { 5 for (var key in object) { 6 7 var postKey = isFinite(key) 8 ? (prefix != "" ? prefix : "") + "[" + key + "]" 9 : (prefix != "" ? prefix + "." : "") + key; 10 11 switch (typeof (object[key])) { 12 case "number": case "string": case "boolean": 13 result[postKey] = object[key]; 14 break; 15 16 case "object": 17 if (object[key] && object[key].toUTCString) 18 result[postKey] = object[key].toUTCString().replace("UTC", "GMT"); 19 else { 20 buildResult(object[key], postKey != "" ? postKey : key); 21 } 22 } 23 } 24 }; 25 26 buildResult(value, ""); 27 28 return result; 29 };控制器方法:
View Code 1 #region 接受Ajax請(qǐng)求過(guò)來(lái)的json格式數(shù)據(jù)+JsonResult SaveSaleOrder(SaleOrder model, List<SaleOrderDetail> detailsList) 2 /// <summary> 3 /// 接受Ajax請(qǐng)求過(guò)來(lái)的json格式數(shù)據(jù) 4 /// </summary> 5 /// <param name="model">訂單實(shí)體</param> 6 /// <param name="detailsList">訂單詳細(xì)實(shí)體</param> 7 /// <returns></returns> 8 public JsonResult SaveSaleOrder(SaleOrder model, List<SaleOrderDetail> detailsList) 9 { 10 try 11 { 12 //創(chuàng)建訂單詳細(xì)的xml對(duì)象 13 var detailsXml = detailsList.Select(c => new XElement("Detail", 14 new XAttribute("ProductID", c.ProductID), 15 new XAttribute("ProductName", c.ProductName), 16 new XAttribute("Quantity", c.Quantity) 17 )).ToList(); 18 /*生成的xml格式為下 19 <Detail ProductID=c.ProductID ProductName=c.ProductName Quantity=c.Quantity/> 20 */ 21 22 //創(chuàng)建訂單的xml對(duì)象 23 var xml = new XElement("ROOT", new XElement("SaleOrder", new XAttribute("KehuXingming", model.KehuXingming), detailsXml)); 24 /* 25 SaveSaleOrder '<ROOT> 26 <SaleOrder KehuXingming="12312"> 27 <Detail ProductID="123" ProductName="123" Quantity="1231" /> 28 <Detail ProductID="1" ProductName="123" Quantity="2312" /> 29 <Detail ProductID="123" ProductName="123" Quantity="3" /> 30 <Detail ProductID="123" ProductName="123" Quantity="123" /> 31 </SaleOrder> 32 </ROOT>' 33 */ 34 35 //將xml轉(zhuǎn)換為字符串 36 string xmlStr = xml.ToString(); 37 //linq to sql 38 DataClasses1DataContext db = new DataClasses1DataContext(); 39 //保存 40 db.SaveSaleOrder1(xmlStr); 41 return Json(new { result = true }); 42 } 43 catch (Exception ex) 44 { 45 //記錄錯(cuò)誤日志 ex 46 return Json(new { result = false, msg = "保存失敗!" }); 47 } 48 } 49 #endregion存儲(chǔ)過(guò)程:
View Code 1 USE [TEST] 2 GO 3 /****** Object: StoredProcedure [dbo].[SaveSaleOrder] Script Date: 2013/1/4 星期五 1:08:06 ******/ 4 SET ANSI_NULLS ON 5 GO 6 SET QUOTED_IDENTIFIER ON 7 GO 8 ALTER PROCEDURE [dbo].[SaveSaleOrder] 9 @xml nvarchar(max) 10 AS 11 BEGIN 12 DECLARE @idoc int 13 14 --把字符串解析成xml存到內(nèi)存中,然后把這個(gè)xml對(duì)象在內(nèi)存中的地址返回給@idoc 15 EXEC sp_xml_preparedocument @idoc OUTPUT, @xml 16 17 --創(chuàng)建臨時(shí)表 18 create table #saleOrder (kehuxingming nvarchar(50)) 19 create table #saleOrderDetails (productId int,productName nvarchar(50),quantity int) 20 21 --從xml里面取到主表的數(shù)據(jù) 22 INSERT INTO #saleOrder(kehuxingming) 23 SELECT KehuXingming 24 FROM OPENXML (@idoc, '/ROOT/SaleOrder',1) 25 WITH (KehuXingming nvarchar(50)) 26 27 --從xml里面取到從表的數(shù)據(jù) 28 INSERT INTO #saleOrderDetails(productId ,productName ,quantity ) 29 SELECT ProductID,ProductName,Quantity 30 FROM OPENXML (@idoc, '/ROOT/SaleOrder/Detail',1) 31 WITH (ProductID int,ProductName nvarchar(50),Quantity int) 32 33 --把主記錄臨時(shí)表 插入到 銷售單的主表 34 INSERT INTO saleOrder(kehumingchen) 35 SELECT kehuxingming from #saleOrder 36 37 declare @id int 38 set @id=@@IDENTITY 39 40 --把從表臨時(shí)表 插入到 銷售單的從表 41 INSERT INTO saleOrderDetails(saleOrderId, productId, productName, quantity) 42 SELECT @id,productId ,productName ,quantity from #saleOrderDetails 43 44 drop table #saleOrder 45 drop table #saleOrderDetails 46 47 END然后就實(shí)現(xiàn)了訂單表和訂單詳細(xì)表的新增了。。
?
?
轉(zhuǎn)載于:https://www.cnblogs.com/jerrybing/archive/2013/01/04/2843546.html
總結(jié)
以上是生活随笔為你收集整理的MVC中实现订单表和订单详细表联动新增的一种方法的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: [003]Reference in C+
- 下一篇: 2013 年规划