【问题标题】:jqgrid rowobject value is undefinedjqgrid rowobject 值未定义
【发布时间】:2014-08-14 14:48:19
【问题描述】:

我使用以下代码来绑定 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>

【问题讨论】:

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


    【解决方案1】:

    了解来自 URL /HR/PassJsonJob/ 的服务器响应格式很重要。 rowObject 的格式对应于来自服务器响应的项目​​的格式。因此,rowObject.JobsID 而不是 rowObject[0] 可能会更正访问 JobsID 属性的方法。因为您使用loadonce: true,所以rowObject 的格式可能是rowObject[0]在第一次加载时。以后比如在本地分页或者数据排序时,rowObject的格式会是带有JobsID属性的对象,所以rowObject.JobsID是正确的。

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

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

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

    【讨论】:

    • 关于 loadonce: true 和获取 rowObject 数据的非常有用的信息 - 谢谢 Oleg!
    • @FastTrack:不客气!此外,我在free jqGrid 中实现了另一种方法,可以在自定义格式化程序中使用。由于兼容性原因,我无法修改 rowObject 的格式,但我使用附加属性 rowData 扩展了 options 对象,该属性包含 always 已解析命名格式的数据。所以可以使用options.rowObject.JobsID 而不是rowObject[0] || rowObject.JobsID。即使在从 XML 源读取的情况下,options.rowObject.JobsID 的值也会起作用。
    • 哇,太好了!如果我想开始使用free jqGrid,有什么需要知道的吗?我目前正在使用jQGrid version 4.4.1
    • @FastTrack:我试图保持对旧版本的最大兼容性,但主要还是有一些问题,我修复了一些旧错误,但旧程序间接使用了这些错误。我建议您通过将 URL 从 CDN 更改为 URL 来尝试 jqGrid。见the wiki。免费的 jqGrid 包含许多新功能,这些新功能在每个版本的自述文件和许多 wiki 文章中都有描述。因此,我建议您在第一次测试后查看 wiki 文章。
    • @FastTrack:如果你对免费的 jqGrid 有一些问题,那么你可以在 stackoverflow 上提出新问题或在 GitHub 上写新问题(参见here)。您已经可以看到超过 100 个已关闭的问题。
    猜你喜欢
    • 2016-06-18
    • 1970-01-01
    • 1970-01-01
    • 2014-10-22
    • 1970-01-01
    • 2013-01-25
    • 1970-01-01
    • 2012-06-30
    • 1970-01-01
    相关资源
    最近更新 更多