当用户单击另一个表的行时,我试图填充一个表。我在第一个表onClick
的<tr>
标签中有一个事件,它触发一个函数将三个属性发送到我的 webapi。我有一个命名处理程序,它接受三个属性并将它们用作另一种方法的输入值,以从 Azure 表中检索数据。响应是我提供给 JavaScript 代码的预先格式化的 JSON 数据。
我在渲染视图中看到的是一长串 JSON 文本;根本没有列或行。根据文档,我应该能够将 绑定dataSet
到 的data
值DataTable
并动态构建表。
JavaScript:
function GetActivityLog(pk, rk, cn) {
var dataSet = $('#tblActivityLogs').load('/Nodes?handler=ActivityLog' + '&PartitionKey=' + pk + '&RowKey=' + rk + '&ComputerName=' + cn);
$('#tblActivityLogs').DataTable({
"ajax": {
url: '/Nodes?handler=ActivityLog' + '&PartitionKey=' + pk + '&RowKey=' + rk + '&ComputerName=' + cn,
data: dataSet
}
});
console.dir(dataSet);
}
$(document).ready(function () {
$('#tblActivityLogs').DataTable({
"order": [[0, "desc"]],
columnDefs: [
{
targets: 0,
className: 'dt-body-nowrap'
}
]
});
})
剃刀/HTML:
<tr onmouseover="" style="cursor: pointer;" role="button" id="getActivtiy" onclick="GetActivityLog('@item.PartitionKey','@item.RowKey','@item.ComputerName');">
HTML表:
<div class="row">
<div class="col-lg-12">
<table id="tblActivityLogs" class="display"></table>
</div>
</div>
C#代码:
public async Task<ContentResult> OnGetActivityLog([FromQuery] string PartitionKey, string RowKey, string ComputerName)
{
Activities = await _azureTableConnection.GetActivitiesAsync(PartitionKey, RowKey, ComputerName);
return Content(JsonConvert.SerializeObject(new { Activities }));
}
console.dir(dataSet) 输出:
更新:
在 ajax 调用之前设置一个断点来测试函数和输入值,但仍然得到一个(未定义的)错误。
根据“凯文”的帖子(https://datatables.net/forums/discussion/comment/136685/#Comment_136685),加上@Hackerman 的建议,我终于有了一个可行的解决方案。
ajax.reload()
orDataTables().destroy()
或任何其他方法ajax:
(请参阅 Kevin 的帖子)。如果您ajax.reload()
在用数据填充表后尝试使用该方法,您将收到无效的 JSON 错误。.done
触发匿名函数,而是使用success
标签来启动它。这是最终的解决方案:
function GetActivityLog(pk, rk, cn) {
$.ajax({
url: '/Nodes?handler=ActivityLog' + '&PartitionKey=' + pk + '&RowKey=' + rk + '&ComputerName=' + cn,
success: function (json) {
table = $('#tblActivityLogs').DataTable({
"order": [[0, "desc"]],
});
table.clear();
table.rows.add(json).draw();
}
})
}
$(document).ready(function () {
$('#tblActivityLogs').DataTable({
"order": [[0, "desc"]],
columnDefs: [
{ targets: 0, className: 'dt-body-nowrap', title: 'Date/Time', data: 'timestamp' },
{ targets: 1, title: 'Computer', data: 'computerName' },
{ targets: 2, title: 'Type', data: 'entryType' },
{ targets: 3, title: 'Event ID', data: 'eventid' },
{ targets: 4, title: 'Message', data: 'message' }
]
});
})
奖金:
您实际上可以在填充数据之前加载表,而且您也不需要<thead>
or<tr/td>
标签;只是一个<table>
具有与 onClick 事件匹配的正确 ID的打开/关闭标签。我能够使用正确的标题和数据绑定正确格式化表格。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句