【发布时间】:2014-11-04 16:29:32
【问题描述】:
我正在开发一个 MVC4 应用程序,它也有很好的客户端交互。但是今天,我有一个特定的要求,即在 jqGrid 的一个单元格中可以有动态数量的链接。我采取的方法是:
- 在控制器中创建项目数组以在 jqGrid 中格式化为超链接
- 将此数组作为 JQGrid 单元格值获取并迭代每个 r=array 项以将其格式化为超链接
- 为每个超链接调用控制器方法
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 的值应该描述多个链接,则该值可以是具有属性linkSrc、LinkText的项目的数组(或列表)。控制器的此类输出将描述所需的信息,自定义格式只会将信息转换为链接。 -
感谢 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 片段放置在列的<td>(单元格)中。 最好在问题文本中包含两行测试数据。
标签: jquery asp.net-mvc asp.net-mvc-4 hyperlink jqgrid