asp.net-mvc - 将带有参数的数据表重新加载到 ajax 调用
问题描述
大家好,我有一个列出特定“节点”行的项目。每个节点都可以拥有该节点的父节点。想想简单的层次结构模式。
出色地。我想要发生的是,单击该行时,我希望它突出显示,但是双击一行时,我希望表刷新但使用新数据。数据将基于谁拥有此 ID 的父级。
<div class="table table-striped table-bordered">
<a href="" id="parentIDLink">View Parent</a>
<input id="parentID" name="ParentID" value="" type="hidden">
<table id="myDatatable">
<thead>
<tr>
<th>NodeID</th>
<th>Name</th>
<th>Desc</th>
<th>Active</th>
</tr>
</thead>
</table>
</div>
<script src="~/lib/DataTables-1.10.16/js/jquery.dataTables.js"></script>
<script src="~/lib/DataTables-1.10.16/js/dataTables.bootstrap4.min.js"></script>
<script>
$(document).ready(function () {
var oTable = $('#myDatatable').DataTable({
"ajax": {
"url": '/Node/GetNodes?pParentID=' + $('#parentID').val(),
"type": "get",
"datatype": "json"
},
"autoWidth": true,
"columns": [
{
"data": "NodeID",
"render": function (pID) {
return '<input id="NodeID" value="'+pID+'" disabled/>';
}
},
{ "data": "Name", "width": "100%" },
{ "data": "Desc", "width": "100%" },
{
"data": "IsActive", "width": "50px",
'searchable': false,
"render": function (pActive) {
var status = pActive ? 'checked="checked"' : "";
return '<input class="CheckBox" disabled type="checkbox" ' + status + '" />';
}
}
]
});
$('#myDatatable tbody').on('click', 'tr', function () {
if ($(this).hasClass('selected')) {
$(this).removeClass('selected');
}
else {
oTable.$('tr.selected').removeClass('selected');
$(this).addClass('selected');
$('#parentID').val($('td #NodeID', this).val());
}
});
$('#myDatatable tbody').on('dblclick', 'tr', function() {
if ($(this).hasClass('selected')) {
$(this).removeClass('selected');
}
else {
oTable.$('tr.selected').removeClass('selected');
$('#parentID').val($('td #NodeID', this).val());
oTable.ajax.reload(); // DOESN"T DO WHAT I EXPECT
}
});
$("#parentIDLink").click(function () {
oTable.ajax.reload();
});
});
</script>
以上是该页面的html。下面是调用来绘制列表的 MVC 代码。如果 id 为 null,则基本上抓取所有节点,但如果值不为 null,则抓取具有特定父节点的节点
public ActionResult GetNodes(string pParentID)
{
if (pParentID == null || pParentID == "null" || pParentID == string.Empty)
return base.Json(new { data = m_Context.Nodes.ToList() },
new JsonSerializerSettings());
else
return base.Json(new { data = m_Context.Nodes.Where(m => m.NodeID == pParentID).ToList() },
new JsonSerializerSettings());;
}
我会以错误的方式解决这个问题吗?
解决方案
创建一个函数,根据您的选择重新加载您的数据。在双击事件处理程序中,调用该函数
function LoadDataTable() {
$.ajax({
type: "POST",
url: "/Node/GetNodes",
data: { pParentID: $('#parentID').val() },
success: function(result){
oTable.clear().draw();
oTable.rows.add(result).draw();
}
});
}
$('#myDatatable tbody').on('dblclick', 'tr', function() {
if ($(this).hasClass('selected')) {
$(this).removeClass('selected');
}
else {
oTable.$('tr.selected').removeClass('selected');
$('#parentID').val($('td #NodeID', this).val());
LoadDataTable();
}
});
推荐阅读
- caching - 工作箱未在初始加载时缓存 start_url
- python - 在 AWS Lambda 上将大 json 文件拆分为较小的 json 文件并将其保存在 S3 上
- python - 如何在不获取 PY_VAR0 作为值的情况下从 tkinter 输入框保存到文本文件?
- javascript - 如何使用与特定字符串匹配的列中的值在 d3.js 中进行可视化
- python - 如何从 influxDB API 的 JSON 响应中提取点?
- javascript - 无法读取 discord.js 中未定义的属性“解码器”
- sql-server - SQL 按具有多个唯一值的多列分组,用于分组列
- r - 解决 R 中的数值不稳定积分
- arrays - 如何用几行代码改进这个程序?
- c - 是否可以使用 fgets 将用户输入从一行存储到 2 个数组中?