Ajax 如何在Datatable.net core中编辑行

Ajax 如何在Datatable.net core中编辑行,ajax,asp.net-core,.net-core,datatables,Ajax,Asp.net Core,.net Core,Datatables,我尝试用.net core更新数据表中的一行。Datatable显示数据并有一个新的/删除按钮。但是当我试图编辑一行时,我无法让它工作 这里是mi index.cshtml。谢谢 “ajax”:{ “url”:“./LoadIntervaloTrabajo”, “类型”:“职位”, “数据”:{“codigo”:@Model.codigo}, “数据类型”:“json” }, “栏目”:[ {“data”:“horario”,“autowidth”:true}, {“data”:“codigo”

我尝试用.net core更新数据表中的一行。Datatable显示数据并有一个新的/删除按钮。但是当我试图编辑一行时,我无法让它工作

这里是mi index.cshtml。谢谢

“ajax”:{
“url”:“./LoadIntervaloTrabajo”,
“类型”:“职位”,
“数据”:{“codigo”:@Model.codigo},
“数据类型”:“json”
},
“栏目”:[
{“data”:“horario”,“autowidth”:true},
{“data”:“codigo”,“autowidth”:true},
{“data”:“description”,“autowidth”:true},
{“data”:“horainicio”,“autowidth”:true},
{“data”:“duracion”,“autowidth”:true},
{“data”:“cortentrada”,“autowidth”:true},
{“数据”:“cortintermedia”,“autowidth”:true},
{“data”:“cortsalida”,“autowidth”:true},
{“呈现”:函数(数据、类型、行){
返回“”;
}
},
函数编辑数据(codigo){
变量表=$(“#customerDatatable”).DataTable();
var r=table.rows(“.selected”).nodes()[0];
if($(table.buttons(“.editButton”)[0].node.find(“.span”).text()=“Cancel”){
$(r).子项(“td”)。每个(功能(i,it){
如果(i>0){
var od=table.cells(it.data()[0];
$(it).html(od);
}
});                                              
设置按钮(“取消”);
}否则{
$(r).子项(“td”)。每个(功能(i,it){
如果(i>0){
var h=$(“”);
h、 val(it.innerText);
$(it).html(h);
}
});
设置按钮(“编辑”);
}
我尝试用.net core更新数据表中的一行

要实现行更新功能,可以参考以下代码段

渲染用于更新最后一列中的行的两个按钮

测试结果

"columns": [
    {
        "data": "horario", "autowidth": true
    },
    { "data": "codigo", "autowidth": true },
    { "data": "descripcion", "autowidth": true },
    { "data": "horainicio", "autowidth": true },
    { "data": "duracion", "autowidth": true },
    { "data": "cortentrada", "autowidth": true },
    { "data": "cortintermedia", "autowidth": true },
    { "data": "cortsalida", "autowidth": true },
    {
        "render": function (data, type, row) { return "<a href='#' class='btn btn-info' onclick = EditData(this); >Editar</a><a href='#' class='btn btn-info btn-hidden' onclick = UpdateData(this); >Updatear</a>"; }
    }
]
function EditData(btnedit) {
    //find current row
    var $row = $(btnedit).parent().parent();
    var $tds = $row.find("td").not(':nth-child(2)').not(':last');

    $.each($tds, function (i, el) {
        var txt = $(this).text();
        $(this).html("").append("<input type='text' value=\"" + txt + "\">");
    });
    $(btnedit).siblings("a").removeClass("btn-hidden");
    $(btnedit).addClass("btn-hidden");
}

function UpdateData(btnupdate) {
    var $row = $(btnupdate).parent().parent();

    var horario = $row.find("td:nth-child(1)").find("input").val();
    var codigo = $row.find("td:nth-child(2)").text();
    var descripcion = $row.find("td:nth-child(3)").find("input").val();
    var horainicio = $row.find("td:nth-child(4)").find("input").val();
    var duracion = $row.find("td:nth-child(5)").find("input").val();
    var cortentrada = $row.find("td:nth-child(6)").find("input").val();
    var cortintermedia = $row.find("td:nth-child(7)").find("input").val();
    var cortsalida = $row.find("td:nth-child(8)").find("input").val();


    var data_for_update = { "horario": horario, "codigo": codigo, "descripcion": descripcion, "horainicio": horainicio, "duracion": duracion, "cortentrada": cortentrada, "cortintermedia": cortintermedia, "cortsalida": cortsalida };

    //console.log(data_for_update);

    //make request to update data
    $.ajax({
        type: 'POST',
        contentType: 'application/json; charset=utf-8',
        url: "/{controller_name_here}/Update",
        data: JSON.stringify(data_for_update),
        success: function (json) {
            console.log(json);
            var $tds = $row.find("td").not(':nth-child(2)').not(':last');

            $.each($tds, function (i, el) {
                var txt = $(this).find("input").val()
                $(this).html(txt);
            });
            $(btnupdate).siblings("a").removeClass("btn-hidden");
            $(btnupdate).addClass("btn-hidden");
        },
        //...
    });


            
}
.btn-hidden{
    display:none;
}