DataTables.NetCore 0.1.0

dotnet add package DataTables.NetCore --version 0.1.0                
NuGet\Install-Package DataTables.NetCore -Version 0.1.0                
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="DataTables.NetCore" Version="0.1.0" />                
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add DataTables.NetCore --version 0.1.0                
#r "nuget: DataTables.NetCore, 0.1.0"                
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
// Install DataTables.NetCore as a Cake Addin
#addin nuget:?package=DataTables.NetCore&version=0.1.0

// Install DataTables.NetCore as a Cake Tool
#tool nuget:?package=DataTables.NetCore&version=0.1.0                

DataTables.NetCore

This package provides a way to create self-contained DataTable classes for the famous datatables.net jQuery plugin which manage rendering, querying, filtering, sorting and other desireable tasks for you, written in .NET Standard for ASP.NET Core applications with focus on Entity Framework Core. The package is heavily inspired by Laravels (PHP) counterpart yajra/datatables and extensions of said package.

Usage

To create a DataTable, you'll need to create a new class implementing the IDataTable interface. There is an abstract base class called DataTable available for you to inherit from, providing default implementations for most methods. You only have to provide own implementations for a few methods:

public class PersonDataTable 
    : DataTable<Person, PersonViewModel>, IDataTable<Person, PersonViewModel>
{
    public override IList<DataTablesColumn<Person, PersonViewModel>> Columns()
    {
        return new List<DataTablesColumn<Person, PersonViewModel>>
        {
            // Your DataTable column definitions come here
        };
    }

    public override IQueryable<Person> Query()
    {
        return _dbContext.Persons;
    }

    public override Expression<Func<Person, PersonViewModel>> MappingFunction()
    {
        return p => AutoMapper.Mapper.Map<PersonViewModel>(p);
    }
}

As you can see, a DataTable always requires two models to work. One is used internally to access the underlying data while the other is used to render the results for the response. The dats is mapped using a configurable mapping function. We recommend using the great AutoMapper package by initializing the mapper in the Startup.cs and configuring the mapping function in the custom DataTable class as seen above.

// Startup.cs
Mapper.Initialize(m =>
{
    m.AddProfile<DefaultMappingProfile>();

    // Or, to pass some dependencies to the mapping profile (when using AutoMapper)
    m.AddProfile(new DefaultMappingProfile(services.BuildServiceProvider().GetService<IViewRenderService>()));
});

// PersonDataTable.cs
public override Expression<Func<Person, PersonViewModel>> MappingFunction()
{
    return p => AutoMapper.Mapper.Map<PersonViewModel>(p);
}

Of course you can also create a base class for all your DataTables with a generic implementation of the mapping provider function if you don't want to define the same function over and over again.

For a quick start, we recommend having a look at the PersonDataTable example in the Sample project. It is a basic example showcasing what is possible with this package and how easy it is to setup a new DataTable.

After defining a custom DataTable, you only have to register it in your service container, inject it to your controller and pass it to the view via the ViewBag. In the view, you can then render the HTML and the JavaScript for your table. Rendering the global defaults for your DataTables is optional:

// MyTable.cshtml
@{
    var DataTable = (MyCustomDataTable)ViewBag.MyCustomDataTable;
}

<div class="table-responsive">
  @Html.Raw(DataTable.RenderHtml())
</div>

@section Scripts {
    $(document).ready(function () {
        @Html.Raw(DataTable.RenderScript(Url.Action("TableData", "MyController")))
    });
}

// _Layout.cshtml (Optional)
<script type="text/javascript">
    @Html.Raw(DataTables.NetCore.Configuration.DataTablesConfigurationBuilder.BuildGlobalConfigurationScript())
</script>
@RenderSection("Scripts", required: false)
Product Compatible and additional computed target framework versions.
.NET net5.0 was computed.  net5.0-windows was computed.  net6.0 was computed.  net6.0-android was computed.  net6.0-ios was computed.  net6.0-maccatalyst was computed.  net6.0-macos was computed.  net6.0-tvos was computed.  net6.0-windows was computed.  net7.0 was computed.  net7.0-android was computed.  net7.0-ios was computed.  net7.0-maccatalyst was computed.  net7.0-macos was computed.  net7.0-tvos was computed.  net7.0-windows was computed.  net8.0 was computed.  net8.0-android was computed.  net8.0-browser was computed.  net8.0-ios was computed.  net8.0-maccatalyst was computed.  net8.0-macos was computed.  net8.0-tvos was computed.  net8.0-windows was computed. 
.NET Core netcoreapp2.0 was computed.  netcoreapp2.1 was computed.  netcoreapp2.2 was computed.  netcoreapp3.0 was computed.  netcoreapp3.1 was computed. 
.NET Standard netstandard2.0 is compatible.  netstandard2.1 was computed. 
.NET Framework net461 was computed.  net462 was computed.  net463 was computed.  net47 was computed.  net471 was computed.  net472 was computed.  net48 was computed.  net481 was computed. 
MonoAndroid monoandroid was computed. 
MonoMac monomac was computed. 
MonoTouch monotouch was computed. 
Tizen tizen40 was computed.  tizen60 was computed. 
Xamarin.iOS xamarinios was computed. 
Xamarin.Mac xamarinmac was computed. 
Xamarin.TVOS xamarintvos was computed. 
Xamarin.WatchOS xamarinwatchos was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last updated
0.1.0 2 2/15/2019