数据表用其作用域之外的数据替换变量

datatable replaces variable with data from outside its scope

本文关键字:数据 替换 变量 作用域 数据表      更新时间:2023-09-26

我正在使用datatable .net来显示一些文件附件,现在我想在控制器中添加描述和编辑链接到我的操作,但它的行为真的很奇怪。

我有这个代码

"aoColumnDefs": [{
    "fnRender": function (oObj) {
        var id = oObj.aData[0];
        var uploaded = oObj.aData[1];
        var dosseirId = oObj.aData[2];
        var contentLenght = oObj.aData[3];
        var filename = oObj.aData[4];
        var description = oObj.aData[5];
        var contentType = oObj.aData[6];
        var retVal = '<div>' + '<div>' + '<a href="' + GetAbsolutePath('Attachment/Download?id=' + id) + '">' + filename + '</a>' + '<a href="Delete" onclick="javascript:systematic_HTMLEditor.handleDelete(' + id + '); return false;"><img src="' + GetAbsolutePath('Content/remove-upload.png') + '" /> </a>' + '</div>' + '</div>';
        return retVal;
    },
    "aTargets": [0],
    "bSortable": true
}, {
    "bVisible": false,
    "aTargets": [1]
}, {
    "bVisible": false,
    "aTargets": [2]
}, {
    "bVisible": false,
    "aTargets": [3]
}, {
    "bVisible": false,
    "aTargets": [4]
},
{
    "fnRender": function (oObj) {
        var id = oObj.aData[0];
        var uploaded = oObj.aData[1];
        var dosseirId = oObj.aData[2];
        var contentLenght = oObj.aData[3];
        var filename = oObj.aData[4];
        var description = oObj.aData[5];
        var contentType = oObj.aData[6];
        var retVal = id;
        return retVal;
    },
    "aTargets": [6],
    "bSortable": true
}

但是这给了我这个结果

Attachment Description Editlink
"attachment3.pdf" "i dag" "attachment3.pdf"

所以3列应该是附件的ID,但被翻译成结果从目标[0]这是attachment3.pdf,然后我尝试重命名很多变量没有任何结果,如果我改变,所以我不打印ID,但contentTypecontentLength然后没有问题,正确的数据显示。我需要发布ID来创建一个编辑链接

这是第一部分的oObj.aDatas内容

aData: Array[7]
0: 21
1: "12-10-2011 08:06:00"
2: 1
3: 81695
4: "attachment3.pdf"
5: "i dag"
6: "application/pdf"
length: 7

在这里,在第二部分,以及ID如何突然从前面的代码中获得这个值,我真的不明白。

    aData: Array[7]
0: "<div><div><a href="/Attachment/Download?id=21">attachment3.pdf</a><a href="Delete" onclick="javascript:systematic_HTMLEditor.handleDelete(21); return false;"><img src="/Content/remove-upload.png" /> </a></div></div>"
1: "12-10-2011 08:06:00"
2: "1"
3: "81695"
4: "attachment3.pdf"
5: "i dag"
6: "application/pdf"
length: 7

我认为这里发生的是fnRender实际上改变了aData.oObj的值。你需要做的是设置bUseRendered: false

"aoColumnDefs": [{
    "fnRender": function (oObj) {
        var id = oObj.aData[0];
        var uploaded = oObj.aData[1];
        var dosseirId = oObj.aData[2];
        var contentLenght = oObj.aData[3];
        var filename = oObj.aData[4];
        var description = oObj.aData[5];
        var contentType = oObj.aData[6];
        var retVal = '<div>' + '<div>' + '<a href="' + GetAbsolutePath('Attachment/Download?id=' + id) + '">' + filename + '</a>' + '<a href="Delete" onclick="javascript:systematic_HTMLEditor.handleDelete(' + id + '); return false;"><img src="' + GetAbsolutePath('Content/remove-upload.png') + '" /> </a>' + '</div>' + '</div>';
        return retVal;
    },
    "bUseRendered": false,
    "aTargets": [0],
    "bSortable": true
}, {
    "bVisible": false,
    "aTargets": [1]
}, {
    "bVisible": false,
    "aTargets": [2]
}, {
    "bVisible": false,
    "aTargets": [3]
}, {
    "bVisible": false,
    "aTargets": [4]
},
{
    "fnRender": function (oObj) {
        var id = oObj.aData[0];
        var uploaded = oObj.aData[1];
        var dosseirId = oObj.aData[2];
        var contentLenght = oObj.aData[3];
        var filename = oObj.aData[4];
        var description = oObj.aData[5];
        var contentType = oObj.aData[6];
        var retVal = id;
        return retVal;
    },
    "aTargets": [6],
    "bSortable": true
}