MVC中实现订单表和订单详细表联动新增的一种方法

直接上视图的代码:

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>产品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>数量:</td>
16             <td>
17                 <input type="text" name="quantity" /></td>
18         </tr>
19         <tr>
20             <td>产品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>数量:</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         //声明局部变量,构造json格式数据
 8         var data = {};
 9         //为data动态添加属性
10         data.model = {};
11         data.detailsList = [];
12 
13         //存放订单表数据
14         data.model.KehuXingming = $("#kehuxingming").val();
15 
16         //each隐式迭代
17         $.each($("#detailsTable tr"), function (i, o) {
18 
19             //将dom元素转换为Jquery对象
20             var obj = $(o);
21             //构造订单详细表数据数组:[{}]
22 
23             var detail = {};
24             //用find方法找到input标签对应产品属性,赋值给detail动态创建的属性
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         //此处获得构造出来的data要经过一个postify.js的特殊处理,后台才能接收到这个构造成json格式的数据
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请求过来的json格式数据+JsonResult SaveSaleOrder(SaleOrder model, List<SaleOrderDetail> detailsList)
 2         /// <summary>
 3         /// 接受Ajax请求过来的json格式数据  
 4         /// </summary>
 5         /// <param name="model">订单实体</param>
 6         /// <param name="detailsList">订单详细实体</param>
 7         /// <returns></returns>
 8         public JsonResult SaveSaleOrder(SaleOrder model, List<SaleOrderDetail> detailsList)
 9         {
10             try
11             {
12                 //创建订单详细的xml对象
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                 //创建订单的xml对象
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转换为字符串
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                 //记录错误日志 ex
46                 return Json(new { result = false, msg = "保存失败!" });
47             }
48         }
49         #endregion

存储过程:

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存到内存中,然后把这个xml对象在内存中的地址返回给@idoc
15      EXEC sp_xml_preparedocument @idoc OUTPUT, @xml
16     
17     --创建临时表
18     create table #saleOrder (kehuxingming nvarchar(50))
19     create table #saleOrderDetails (productId int,productName nvarchar(50),quantity int)
20 
21     --从xml里面取到主表的数据 
22     INSERT INTO #saleOrder(kehuxingming) 
23     SELECT KehuXingming
24     FROM OPENXML (@idoc, '/ROOT/SaleOrder',1)
25     WITH (KehuXingming nvarchar(50))
26      
27     --从xml里面取到从表的数据 
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      --把主记录临时表   插入到  销售单的主表
34     INSERT INTO saleOrder(kehumingchen)
35     SELECT kehuxingming from #saleOrder 
36 
37     declare @id int
38     set @id=@@IDENTITY
39 
40      --把从表临时表   插入到  销售单的从表
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

然后就实现了订单表和订单详细表的新增了。。

 

 

转载于:https://www.cnblogs.com/jerrybing/archive/2013/01/04/2843546.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值