【问题标题】:Create multiple hyperlinks in single cell of JQGrid在 JQGrid 的单个单元格中创建多个超链接
【发布时间】:2014-11-04 16:29:32
【问题描述】:

我正在开发一个 MVC4 应用程序,它也有很好的客户端交互。但是今天,我有一个特定的要求,即在 jqGrid 的一个单元格中可以有动态数量的链接。我采取的方法是:

  1. 在控制器中创建项目数组以在 jqGrid 中格式化为超链接
  2. 将此数组作为 JQGrid 单元格值获取并迭代每个 r=array 项以将其格式化为超链接
  3. 为每个超链接调用控制器方法

jqGrid 的控制器部分:

  var jsonData =new {rows = (from row in dlist
                                           select new {
                                                         Id = row.ContactOrderNo,
                                                         cell = new string[] {
                                                         Convert.ToString(row.ContactOrderNo)
                                                        ,Convert.ToString(row.ContactOrderNo)
                                                        ,Convert.ToString(row.SerialNumber)
                                                        ,Convert.ToString(row.ModelNo)
                                                        ,Convert.ToString(row.Capacity)
                                                        ,Convert.ToString(new Obj[]{ new {LinkText="22.pdf", LinkSrc="mydrive\\22.pdf"}, new {LinkText="33.pdf", LinkSrc="mydrive\\33.pdf"})        
                                                        }                                               

                                           }).ToArray()
                               };

            return Json(jsonData, JsonRequestBehavior.AllowGet);

JQGrid 脚本:

colNames: ['Contract-OrderNum', 'Contract Order Number', 'Serial Number', 'Model Number', 'Capacity', 'ContractDetails'],
    colModel: [
                    { name: 'ModelNo', width: 150, editable: false, hidden: true, editrules: { required: true } },
                    {
                        name: 'Contract-OrderNo', width: 300, editable: false, hidden: false, formatter: function (cellvalue, options, rowObject) {

                            return '<a href="/OrderList/AddOrder/?ModelNo=' + cellvalue + '" >' + cellvalue + '</a>';
                        }
                    },

                       { name: 'SerialNumber', width: 150, editable: false, editrules: { required: true } },
                       { name: 'ModelNo', width: 150, editable: false, editrules: { required: true } },
                        { name: 'Capacity', width: 150, editable: false, editrules: { required: true } },
                          {
                              name: 'ContractDetails', width: 150, editable: false, formatter: function (cellvalue, options, rowObject) {
                                  return '<a href="/OrderList/GetPDFFileStream/?rowObject=' + rowObject + '" target="_blank" >' + cellvalue + '</a>';
                              }
                          }

    ], 

请告诉我实现它所需的解决方法。

【问题讨论】:

  • 首先Controller Action需要生成描述所需信息的数据。例如,如果可能只是项目数组,其中每个项目都像new {ContactOrderNo=row.ContactOrderNo, SerialNumber=row.SerialNumber, ModelNo=row.ModelNo, Capacity=row.Capacity, ContractDetails=...}。如果 ContractDetails 的值应该描述多个链接,则该值可以是具有属性linkSrcLinkText 的项目的数组(或列表)。控制器的此类输出将描述所需的信息,自定义格式只会将信息转换为链接。
  • 感谢 Oleg 的及时回复!你的意思是我需要从控制器发送'linkSrc'、'LinkText'。在这种情况下,我应该在自定义格式化程序中获得什么以及如何获得。
  • 我的意思是像ContractDetails = new [] {new {LinkText="Google", linkSrc="http://www.google.com/"}, new {LinkText="Stackoverflow", linkSrc="http://stackoverflow.com/"}} 这样的值。最好包含两行可以生成控制器并描述所需信息的测试数据。 jqGrid 能够读取实用的任何格式的数据。所以控制器只需要返回项目数组,每个项目都应该以任何格式描述行。
  • 明白了!那么我将如何在 JqGrid 中解析它。有一个列名:'ContractDetails',宽度:150,可编辑:false,格式化程序:function(cellvalue, options, rowObject) { return '' + 单元格值 + '';使用您的动态链接格式化程序我将如何获得这些值?请详细说明。
  • 自定义格式化程序的代码取决于控制器生成的数据的确切格式。格式化程序中的cellvalue 将代表输入数据中ContractDetails 属性的值,rowObject 将是代表整行的输入数据的完整项。自定义格式化程序只需要返回作为 HTML 片段的字符串,其中包含基于输入数据生成的链接。 jqGrid 会将 HTNL 片段放置在列的&lt;td&gt;(单元格)中。 最好在问题文本中包含两行测试数据。

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


【解决方案1】:

我为您创建了the demo,它演示了相应的自定义格式化程序。在显示网格中

来自输入数据

[
    {"ContactOrderNo":123, "SerialNumber":"abc", "ModelNo":"ModelNo1", "Capacity":123456,
     "ContractDetails":[{"LinkText":"12.pdf", "LinkSrc":"http://www.glsh.net/media/files/Druckertest.pdf"}, {"LinkText":"13.pdf", "LinkSrc":"http://www.tinten-toner-24.com/shared/pdf/testseite.pdf"}]},
    {"ContactOrderNo":456, "SerialNumber":"xyz", "ModelNo":"ModelNo2", "Capacity":789012,
     "ContractDetails":[{"LinkText":"22.pdf", "LinkSrc":"http://www.glsh.net/media/files/Druckertest.pdf"}, {"LinkText":"23.pdf", "LinkSrc":"http://www.tinten-toner-24.com/shared/pdf/testseite.pdf"}]}
]

应该生成服务器。

演示中ContractDetails列的定义如下所示

{ name: "ContractDetails",
    formatter: function (cellvalue) {
        var i, res = "", linkInfo;

        if (cellvalue == null || !$.isArray(cellvalue)) {
            return "&nbsp;"; // empty cell in case or error
        }

        for (i = 0; i < cellvalue.length; i++) {
            linkInfo = cellvalue[i];
            res += (res.length > 0 ? ", " : "") +
                '<a href="' + linkInfo.LinkSrc + '" target="_blank" >' +
                linkInfo.LinkText + '</a>';
        }

        return res;
    }
}

【讨论】:

  • 单元格值是多少。当我使用这个函数时,它说单元格值未定义。你能指导一下吗
  • @sandy143: cellvalue 是来自列输入数据的值(本例中输入数据的属性ContractDetails)。您应该发布单独的问题,其中包含用于填充网格的输入数据示例、有关版本的信息以及您使用的 jqGrid 的分支,并描述您想要获得的结果。可能您根本不需要使用自定义格式化程序,而是使用带有相应选项的预定义格式化程序。
猜你喜欢
  • 2021-09-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-14
  • 2018-06-13
  • 2020-10-16
  • 2015-02-11
  • 2015-04-05
相关资源
最近更新 更多