0

我有一个表单,其中有一堆文本框和下拉列表。我现在需要添加另一个子对象数组并将其包含在我的表单帖子中。

我打算将它作为 html 表手动滚动,但我认为我可以利用 jqGrid。我可以在本地使用 jqGrid 添加数据然后将其包含在表单帖子中的最佳方式是什么?我需要 jqGrid 在本地操作的原因是这些子记录是较大表单的一部分,因此在发布较大的表单之前我不能发布 jqGrid 行(所以我有一个 ID 可以加入这些行)

例如,如果我的帖子是一个订单屏幕(带有日期、说明等文本框),现在我想要一个网格,您可以将产品添加到订单中。您可以拥有任意数量的行。.)

如果有任何建议,我的后端是 asp.net-mvc。

4

2 回答 2

2

如果您使用表单编辑,您可以通过多种方式扩展 postdata。最简单的就是onclickSubmit回调的用法:

onclickSubmit: function (options, postData) {
    return {foo: "bar"};
}

如果您使用上述回调,那么将发布到服务器的数据将使用foo带有字符串 value的参数进行扩展"bar"

另一种可能性是使用editData选项editGridRow。最好的方法是使用editData定义为函数的属性。每次发布数据之前都会调用该函数。

例如下面的代码

$("#grid").jqGrid("navGrid", "#pager", {}, {
    editData: {
        foo: function () {
            return "bar";
        }
    },
    onclickSubmit: function (options, postData) {
        return {test: 123};
    }
});

将添加foo=bartest=123到将发送到服务器的参数。

下一个可能性是使用serializeEditData. 回调使您可以完全控制将发送到服务器的数据。

于 2013-04-14T08:23:44.207 回答
1

我正在使用 Oleg 建议的序列化方法。

看法

  $( "#Save" ).click( function ( e )
            {
                e.preventDefault();


                  var griddata= $( "#list" ).getRowData();
                    var model = {
                        grid: griddata
                    };

                    var gridVal = JSON.stringify( model );
                   //Now set this value to a hiddenfield in the form and submit
                   $('#hiddenGridDta').val(gridVal );
                  $( 'form' ).submit();

});

控制器中,使用Newtonsoft.json .jsonconvert() 反序列化这些值。

 public ActionResult SaveTest(TestClass test)
        {

       testViewModel myGrid = JsonConvert.DeserializeObject<testViewModel>(test.hiddenGridDta);
................

}

测试视图模型类

  public class testViewModel 
    {
        public IEnumerable<TestGrid> grid { get; set; }
    }

测试网格类

 public class profileGrid
    {
//fields in the jqgrid (should use the same name as used in *colModel:* of jqgrid)

        public int x
        {
            get;
            set;
        }
        public int y
        {
            get;
            set;
        }
          .......


    }
于 2013-04-15T10:40:06.723 回答