首页新闻找找看学习计划

EasyUI订单主表和订单明细表的修改和保存

0
悬赏园豆:50 [已解决问题] 解决于 2015-10-13 14:26

我的订单主表和明细表分别是两个Model(MVC模式),现在要修改某订单(包括主表和明细表),想要在编辑页面获取主表信息和明细列表信息。不知道要怎么做?请各位大牛指教

AKhui的主页 AKhui | 初学一级 | 园豆:82
提问于:2015-10-08 11:52
< >
分享
最佳答案
0

如果是我的话. 我会这样做..

假设 订单主表的Model叫 OrderModel. 明细表的Model叫 OrderDetailModel.

我会在OrderModel 里面添加一个 Public OrderDetailModel OrderDetail{get;set;} 的属性. 

然后把订单主表的数据查出来之后放入OrderModel里, 然后再查出明细表数据. 放入OrderDetail属性中。

然后将OrderModel传入编辑页面.

 

我没用过EasyUI. 不过感觉应该大同小异. 按照你下面的要求. 我觉得应该是这样做..

1.首先获取到订单主表的信息.传入编辑页面.

2.使用EasyUI 自带的 DataGrid绑定方法, 好像是 $("#grid").datagrid() 方法,通过ajax传入订单主表的主键,获取到明细表的数据. 构成Json数组返回就可以了吧.

收获园豆:48
李丶GuanYao | 小虾三级 |园豆:1228 | 2015-10-08 13:49

非常谢谢你,已经成功将数据获取并显示在页面上。现在准备要解决修改保存数据的问题。不清楚如何将Form表单里的主表信息数据 以及 datagrid里有添加、修改的数据 传递到后台,并分别进行保存到数据库

AKhui | 园豆:82 (初学一级) | 2015-10-10 14:13

@AKhui: 

用EasyUi 自带的方法可以获取改变的数据.例如:

var rows = $('#grid').datagrid('getChanges');

获取到的数据是一个Json数组.这个结果是获取所有改变过的行. 包括(Insert,Update,Delete)

如果你想只获取Insert,或者Update,或者Delete的数据.就用一下这几个.

var insertRows = $('#grid').datagrid('getChanges','inserted');
var updateRows = $('#grid').datagrid('getChanges','updated');
var deleteRows = $('#grid').datagrid('getChanges','deleted');

获取到数据之后.可以通过Ajax传到后台去.也可以用<input type='Submit'> 提交.

如果用Submit 提交的话. 要将获取到的Json数组放到一个Hidden控件里.

主表的数据就用主表的Model来接收,而明细表的数据.因为是Json数组. 所以你需要使用Newtonsoft.Json.JsonConvert.DeserializeObject反序列化成List<Entity>.

李丶GuanYao | 园豆:1228 (小虾三级) | 2015-10-10 15:05

@李丶GuanYao: 谢谢你,可是我对ajax不熟悉,现在不知道要怎么把数据传到后台去。

想请教一下关于ajax传递格式(url,....),以及对应后台方法的格式。

 因为我自己网上找了一下ajax并填写路径,但是点击提交的时候页面就是没反应。。。

AKhui | 园豆:82 (初学一级) | 2015-10-10 16:05

@AKhui: 

我弄了个例子. 这个例子是用<input type='submit'> 按钮做的. 你参考一下吧.

前台:

@model MVCDemo.Models.LoginModel
@using(Html.BeginForm("Save","Home")){
    <table>
        <tr>
            <td>
                @Html.Hidden("jsonStr")
                @Html.TextBoxFor(m=>m.LoginID)
            </td>
        </tr>
        <tr>
            <td>@Html.PasswordFor(m => m.Password)</td>
        </tr>
    </table>
    <input type="submit" value="Save" id="save" />
}

<script type="text/javascript">
    $(function () {
//点击保存按钮时, 将json数组保存到Hidden控件里. $(
"#save").click(function () { var jsonStr = "{'name'='test','age'='18'}"; $("#jsonStr").val(jsonStr); }); }); </script>

后台:

[HttpPost]
public ActionResult Save(LoginModel model, string jsonStr)
{
       //这样数据就传到后台了. 然后再写处理逻辑.
}    

这里的LoginModel 你可以换成你的主表Model. 然后jsonStr 你要反序列化成实体类.

李丶GuanYao | 园豆:1228 (小虾三级) | 2015-10-10 16:20

@李丶GuanYao: 谢谢你。

不过后台一直没有没反应,我想知道一下,前端页面的哪一个标识调用后台的Save方法?

直接点击就自动调用Save方法吗?

AKhui | 园豆:82 (初学一级) | 2015-10-10 17:53

@AKhui: 

<input type="submit" value="Save" id="save" /> 

这个点击按钮会提交表单. 调用后台的Save方法. 

注意: 用<input type="submit" /> 不要忘记

@using(Html.BeginForm("Save","Home")){//提交表单到HomeController里的Save Action里

}

李丶GuanYao | 园豆:1228 (小虾三级) | 2015-10-10 18:14

@李丶GuanYao: 好的,谢谢你

AKhui | 园豆:82 (初学一级) | 2015-10-12 11:28
其他回答(1)
0

根楼上差不多,不过最好把OrderModel里面的OrderDetailModel换成List<OrderDetailModel>

收获园豆:2
海神解说 | 园豆:45 (初学一级) | 2015-10-08 14:58

谢谢你们的回答,不过我现在要把数据绑定到编辑页面,其中明细表信息要显示在EasyUI 的datagrid,主表信息显示在表头,这个要怎么整?

支持(0) 反对(0) AKhui | 园豆:82 (初学一级) | 2015-10-08 17:54
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册