Jquery 如何使用具有服务器端数据的子行初始化datatable?

Jquery 如何使用具有服务器端数据的子行初始化datatable?,jquery,asp.net-mvc,datatables,Jquery,Asp.net Mvc,Datatables,我正在构建一个MVC应用程序,其中我正在将数据从控制器传递到视图中 我还使用jqueryjavascript库datatables来显示我的信息。我遇到的问题是,我想使用手风琴功能以隐藏状态显示我的附加信息属性列 问题是,每个示例都显示了如何使用ajax设置它来拉入数据 作为参考,我引入了使用的JavaScript代码。显然,我不能在JS脚本标记中使用Razor服务器端语法,但我需要知道如何执行与正在定义的format函数相同的操作: /* Formatting function for row

我正在构建一个MVC应用程序,其中我正在将数据从控制器传递到视图中

我还使用jqueryjavascript库datatables来显示我的信息。我遇到的问题是,我想使用手风琴功能以隐藏状态显示我的附加信息属性列

问题是,每个示例都显示了如何使用ajax设置它来拉入数据

作为参考,我引入了使用的JavaScript代码。显然,我不能在JS脚本标记中使用Razor服务器端语法,但我需要知道如何执行与正在定义的format函数相同的操作:

/* Formatting function for row details - modify as you need */
function format ( d ) {
    // `d` is the original data object for the row
    return '<table cellpadding="5" cellspacing="0" border="0" style="padding-left:50px;">'+
        '<tr>'+
            '<td>Full name:</td>'+
            '<td>'+d.name+'</td>'+
        '</tr>'+
        '<tr>'+
            '<td>Extension number:</td>'+
            '<td>'+d.extn+'</td>'+
        '</tr>'+
        '<tr>'+
            '<td>Extra info:</td>'+
            '<td>And any further details here (images etc)...</td>'+
        '</tr>'+
    '</table>';
}

$(document).ready(function() {
    var table = $('#example').DataTable( {
        "ajax": "../ajax/data/objects.txt",
        "columns": [
            {
                "className":      'details-control',
                "orderable":      false,
                "data":           null,
                "defaultContent": ''
            },
            { "data": "name" },
            { "data": "position" },
            { "data": "office" },
            { "data": "salary" }
        ],
        "order": [[1, 'asc']]
    } );

    // Add event listener for opening and closing details
    $('#example tbody').on('click', 'td.details-control', function () {
        var tr = $(this).closest('tr');
        var row = table.row( tr );

        if ( row.child.isShown() ) {
            // This row is already open - close it
            row.child.hide();
            tr.removeClass('shown');
        }
        else {
            // Open this row
            row.child( format(row.data()) ).show();
            tr.addClass('shown');
        }
    } );
} );

您可以在Javascript中100%使用Razor,但您不能引用可能用于呈现主行的foreach循环

您仍然需要JS来隐藏/显示子行,但类似于以下内容:

@模型中的每个var项 { @项目名称 @项目.职位 @项目.办公室 @项目.薪金 @Html.DisplayNameFormodelItem=>item.Name: @项目名称 @Html.DisplayNameFormodelItem=>item.Extension: @项目.延期 @Html.DisplayNameFormodelItem=>item.Info: @项目信息 } 其中隐藏类集显示:无;另一个显示的类或其他东西将其设置为表行

单击td.details-control按钮时,使用JS切换子行的显示