jqgrid rowobject值未定义

时间:2014-06-24 11:03:27

标签: javascript jquery asp.net-mvc-4 jqgrid

我使用以下代码绑定jqgrid中的值。

我创建了一个链接按钮,用于访问特定操作方法。

我需要将firstcolumn值传递给action方法。

但是,如果我使用此 href =' @ Url.Action(" ViewApplicants"," HR")?JobsID =" + rowObject [0] +" ' 。显示未定义的值。如何解决这个问题?

 <div>
        <table id="Jobtable"></table>
        <div id="jQGridPager"></div>
        <div id="dialog" title="View Job Detail"></div>
    </div>

    <script type="text/javascript">
            $(document).ready(function () {
                $("#Jobtable").jqGrid({
                    url: '/HR/PassJsonJob/',
                    datatype: "json",
                    mtype: 'GET',
                    colNames: ['Job ID', 'Job Title', 'Job Experience', 'Job Location', 'ViewApplicants'],
                    colModel: [
                                { name: 'JobsID', index: 'JobsID', width: 150, align: 'left', editable: true },
                                { name: 'JobTitle', index: 'JobTitle', width: 150, align: 'left', editable: true },
                                { name: 'JobExperience', index: 'JobExperience', width: 150, align: 'left', editable: true },
                                { name: 'JobLocation', index: 'JobLocation', width: 150, align: 'left', editable: true },
                                {
                                    name: 'ViewApplicants', index: 'ViewApplicants', width: 150, sortable: false,
                                    formatter: function (cellvalue, options, rowObject) {
                                        alert(rowObject)
                                        return "<a href='@Url.Action("ViewApplicants", "HR")?JobsID="+rowObject[0]+"'>View Applicants</a>";
                                     }
                                }
                    ],
                    rowNum: 10,
                    rowList: [10, 20, 30],
                    viewrecords: true,
                    loadonce: true,
                    gridview: true,
                    pager: "#jQGridPager",
                    cellEdit: false,
                    rowNumbers: true,
                    width: 1000,
                    caption: 'Applied Jobs',
                    viewrecords: true
                })
                $('#Jobtable').jqGrid('navGrid', '#jQGridPager',
                {
                    edit: true,
                    add: false,
                    del: false,
                    view: false,
                    search: false
                });
            });


        </script>

1 个答案:

答案 0 :(得分:4)

了解网址/HR/PassJsonJob/的服务器响应格式非常重要。 rowObject的格式对应于服务器响应中的项目格式。因此,rowObject.JobsID而不是rowObject[0]可以纠正访问JobsID属性的方式。由于您使用loadonce: true,因此rowObject的格式在首次加载时可能为rowObject[0] 。稍后,例如,在本地分页或数据排序时,rowObject的格式将是具有JobsID属性的对象,因此rowObject.JobsID将是正确的。

因此rowObject.JobsIDrowObject[0] || rowObject.JobsID的使用可以解决您的问题。

另一个选项可能是在key: trueJobsID列的定义中使用属性colModel。只有当JobsID在每一行中包含唯一值时,才能使用该属性。在jqGrid将使用JobsID列中的值作为rowid的情况下:分配给网格的行(id元素)的<tr>属性的值。在这种情况下,可以使用options.rowId来访问JobsID值。

更新: free jqGrid fork中存在另一个选项,我自2014年底开发。自定义格式化程序的2-d参数(options)属性rowData,包含与rowObject相同的信息,但它始终是对象格式。因此,使用options.rowData.JobsID代替rowObject[0] || rowObject.JobsID是安全的。根本不需要使用自定义格式化程序的3-d参数。免费的jqGrid没有改变3-d参数的格式,以便与以前版本的jqGrid具有最佳的向上兼容性。