如何从模型填充 jqgrid

How to populate jqgrid from a Model

您好,我正在处理使用 jqgrid 的 MVC 项目。我有一个 master 网格。单击行和 edit 按钮我将进入 CreateOrEdit 视图。在该视图中还有一个网格 -Detail 网格。

create 的情况下:主网格的字段(labels 和相应的 EditorFor) 并且详细信息网格将是空的,一旦我们填充所有内容(标签和相应的 EditorFor 和网格)并单击保存 .. 它就被保存了.. 这么多工作就完成了。现在的问题..

编辑时:我必须根据在主网格中选择的 ID 填充详细信息网格。

我试过类似的东西:

url:'@Url.Action("PDVs", "GetData", new { pdv = @Model.Details})'
data: JSON.stringify('@(Model.Details)')

and/or 将 url 指定为:

url:'/PDVs/GetData'

并且在 Controller 中:

public JsonResult GetData(Details details)

以便接收模型并查询它并发回 JsonResult, 但是模型 details 正在为所有字段获取 null 值。

所以有人可以给我任何解决这个问题的想法吗?

更新:详细型号为

using System;
using System.Collections.Generic;
using Repository.Pattern.Ef6;

namespace Abc.PROJECTS.Models
{
    public partial class PDVDuration:Entity
    {
        public int PDVDurationId { get; set; }
        public Nullable<int> PDVId { get; set; }
        public Nullable<System.DateTime> DateFrom { get; set; }
        public Nullable<System.DateTime> DateTo { get; set; }
        public string Type { get; set; }
        public string Remarks { get; set; }
       public virtual PDV PDV { get; set; }
    }
}

这是我的详细信息网格:

jQuery("#DetailsGrid").jqGrid({

           //  url: '/PDVs/GetManintenance',

            // datatype: 'json',

         @*url:'@Url.Action("PDVs", "GetData", new { pdv = @Model.PDVDurations })',*@
            mtype: 'GET',            

            //datatype: "local",
            //data: mydata,
            //data: JSON.pdv.PDVDuration,
           // data:myGridComplete('@Model.PDVDurations'),
            height: 100,
            width: 900,
            colNames: ['DateFrom', 'DateTo', 'Type', 'Remarks'],
            colModel: [
                {
                    name: 'DateFrom', index: 'DateFrom', width: 60, editable: true, sorttype: "date",
                    formatter: 'date',
                    formatoptions: {
                        srcformat: 'm/d/Y',
                        // newformat: 'd/m/Y '
                        //newformat: 'Y-m-d'
                },
                    editoptions: { dataInit: initDateEdit, size: 14 },

                },
                {
                    name: 'DateTo', index: 'DateTo', width: 80, editable: true, sorttype: "date",
                    formatter: 'date',
                    formatoptions: {
                        srcformat: 'm/d/Y',
                        //newformat: 'd/m/Y'
                    },
                    editoptions: { dataInit: initDateEdit, size: 14 },

                },


                {
                    name: 'Type', width: 80, editable: true, formatter: "select",
                    edittype: "select", editoptions: { value: "Open:Open;Maintainance:Maintainance;Closed:Closed", defaultValue: "Open" },


                },
                 {
                     name: 'Remarks', index: 'Remarks', width: 80, editable: true
                 }
                ,
            ],
            @*  data: JSON.stringify('@(Model.PDVDurations)'),*@
           // data:JSON.stringify(viewModel),
            //data:model,
            //model:viewModel,
            //data: JSON.parse(jsonData),
            pager: "#PDVMPager",
            loadonce: true,
            sortname: 'Client',
            ignoreCase: true,
            sortorder: 'asc',
            gridview: true,
            autoencode: true,
            rowNum: 10,
            rowList: [5, 10, 20, 50],
            caption: "Maintenance",
            viewrecords: true,

            editurl: "clientArray",
            gridComplete:function myGridComplete(PDV)
                {
                return JSON.stringify('@(Model.PDVDurations)')
                },


        }).jqGrid("navGrid", "#PDVMPager", {}, editSettings, addSettings, {
            multipleSearch: true,
            overlay: false,
            onClose: function () {

                $("div#ui-datepicker-div.ui-datepicker").hide();
            }
        }).jqGrid("filterToolbar", { defaultSearch: "cn" });
    });

我认为 Url.Action 方法有问题,如果你想要 url 就像你写的那样,你应该翻转参数。

无论如何,如果你需要 whole model:

,我想你可以尝试在你的 jqgrid init 中这样写
url: '@Url.Action("GetData", "PDVs")',
postData: '@Html.Raw(Json.Encode(Model))'

但是如果你只需要一些字段你可以这样写:

url: '@Url.Action("GetData", "PDVs")',
postData: 
{
   PDVDurations: @Model.PDVDurations
}

但是你应该在控制器方法中写不同的签名。像这样:

public JsonResult GetData(int PDVDurations)