[![NuGet](https://img.shields.io/nuget/v/HtmlTableHelper.svg)](https://www.nuget.org/packages/HtmlTableHelper) ![](https://img.shields.io/nuget/dt/HtmlTableHelper.svg) ---

version version version version version version version version version version version version version version version version version

--- ### Features - Mini (DLL Size Only 20KB) and Easy to use. - Support .NET Standard 2.0/.NET 4.6/.NET 4.5/.NET 4.0 - Without Any Third Party Library - Support Anonymous Types,Dapper Dynamic Query,List/Array/Set/Enumrable,DataTable,Dictionary ### Installation You can install the package [from NuGet](https://www.nuget.org/packages/HtmlTableHelper) using the Visual Studio Package Manager or NuGet UI: ```cmd PM> install-package HtmlTableHelper ``` or the `dotnet` command line: ```cmd dotnet add package HtmlTableHelper ``` ### Fiddle Demo: - [HtmlTableHelper ConsoleDemo](https://dotnetfiddle.net/DzddCl) - [HtmlTableHelper ASP.NET MVC Demo (JQuery DataTable)](https://dotnetfiddle.net/u9Ia6M) ### Get Start ##### List/Array/Set/Enumrable non Key/Value Type Example ```C# using HtmlTableHelper; .. var sourceData = new[] { new { Name = "ITWeiHan", Age = "25",Gender = "M" } }; var tablehtml = sourceData.ToHtmlTable(); /* Result:
NameAgeGender
ITWeiHan25M
*/ ``` ##### Dapper Example ```C# using (var cn = "Your Connection") { var sourceData = cn.Query(@"select 'ITWeiHan' Name,25 Age,'M' Gender"); var tablehtml = sourceData.ToHtmlTable(); } ``` ##### Dictionary Example ```C# var sourceData = new[] {new Dictionary (){{"Name" , "ITWeiHan" },{"Age",25},{"Gender","M"}}}; var tablehtml = sourceData.ToHtmlTable(); ``` **Custom Table/TR/TD/TH Attributes (Dynamic Type)** ```C# var data = /*List/Array/Set/Enumrable..*/; var html = data.ToHtmlTable( tableAttributes: new { @class = "SomeClass"} //this is dynamic type, support all attribute ,trAttributes: new { ID = "SomeID" },tdAttributes: new { width = "120 px" },thAttributes: new { @class = "dark-theme" } ); /* Result:
..
..
*/ ``` ##### Attribute Annotation ###### 1. Display : ```C# public class ModelClassWithDisplayAttr { [TableColumn(DisplayName = "Column1")] //MyProperty1 property will render thead-td's innertext : "Column1" public string MyProperty1 { get; set; } [TableColumn(DisplayName = "Column2")] //MyProperty2 property will render thead-td's innertext : "Column2" public string MyProperty2 { get; set; } } ``` ###### 2. Skip : ```C# public class ModelClassWithSkipAttr { [TableColumn( Skip = true)] public string MyProperty1 { get; set; } //MyProperty1 will not render html public string MyProperty2 { get; set; } } ``` ##### HTMLTableBuilder ###### HtmlCaption ```C# var soucreData = new []{ new {MyProperty1="test",MyProperty2=123} }; var html = soucreData.CreateBuilder() .SetCaption("This is Caption", new { id = "CaptionId" }) .ToHtmlTable(); //Result :
This is Caption
MyProperty1MyProperty2
test123
``` ##### HTMLTableSetting Configurable InnerHtml Encoding (Recommended not to do so without a specific reason,because XSS Attack) ```C# var sourceData = new[] { new { Name = "ITWeiHan" } }; //Default Encoding var encodinghtml = sourceData.ToHtmlTable(); //Result: ..<b>ITWeiHan</b>..
var htmltablesetting = new HTMLTableSetting() { IsHtmlEncodeMode = false }; var notEncodinghtml = sourceData.ToHtmlTable(HTMLTableSetting: htmltablesetting); //Result: ..ITWeiHan..
``` ### Extension **ASP.NET Core MVC:** Create a IHtmlHelperExtension.cs ```C# using System.Collections.Generic; using HtmlTableHelper; using Microsoft.AspNetCore.Mvc.Rendering; using Microsoft.AspNetCore.Html; public static class IHtmlHelperExtension { public static HtmlString ToHtmlTable(this IHtmlHelper htmlHelper, IEnumerable enums , object tableAttributes = null, object trAttributes = null, object tdAttributes = null , HtmlTableSetting HTMLTableSetting = null) { var html = enums.ToHtmlTable(tableAttributes, trAttributes, tdAttributes, HTMLTableSetting); return new HtmlString(html); } public static HtmlString ToHtmlTable(this IHtmlHelper htmlHelper, System.Data.DataTable datatable , object tableAttributes = null, object trAttributes = null, object tdAttributes = null , HtmlTableSetting HTMLTableSetting = null) { var html = datatable.ToHtmlTable(tableAttributes, trAttributes, tdAttributes, HTMLTableSetting); return new HtmlString(html); } } ``` razor.cshtml ```C# @Html.ToHtmlTable(new[] { new { Name = "ITWeiHan", Age = "25", Gender = "M" } }) /* Result:
NameAgeGender
ITWeiHan25M
*/ ``` **ASP.NET MVC 5:** Create a HtmlHelperExtension.cs ```C# using System.Collections.Generic; using HtmlTableHelper; using System.Web; using System.Web.Mvc; public static class HtmlHelperExtension { public static HtmlString ToHtmlTable(this HtmlHelper htmlHelper, IEnumerable enums , object tableAttributes = null, object trAttributes = null, object tdAttributes = null , HtmlTableSetting HTMLTableSetting = null) { var html = enums.ToHtmlTable(tableAttributes, trAttributes, tdAttributes, HTMLTableSetting); return new HtmlString(html); } public static HtmlString ToHtmlTable(this HtmlHelper htmlHelper, System.Data.DataTable datatable , object tableAttributes = null, object trAttributes = null, object tdAttributes = null , HtmlTableSetting HTMLTableSetting = null) { var html = datatable.ToHtmlTable(tableAttributes, trAttributes, tdAttributes, HTMLTableSetting); return new HtmlString(html); } } ``` ### Demo **ASP.NET MVC 5 JQuery DataTable Demo:** ```C# using HtmlTableHelper; //.. public class HomeController : Controller { public ActionResult Index() { var datas = new[] { new { Name = "ITWeiHan", Age = "25",Gender = "M" } }; ViewBag.Table = datas.ToHtmlTable(); return View(); } } ``` ```C# @{ Layout = null; } AspNetMvcDemo
@Html.Raw(ViewBag.Table)
``` **ASP.NET Core Demo:** ```C# public class Startup { public void Configure(IApplicationBuilder app, IHostingEnvironment env) { app.Run(async (context) => { var sourceData = new[] { new { Name = "ITWeiHan", Age = "25",Gender = "M" } }; var tablehtml = sourceData.ToHtmlTable(); await context.Response.WriteAsync(tablehtml); }); } } ```