MvcTables
An AJAX/HTML Table framework for ASP.Net MVC
Supports:
- paging,
- sorting,
- filtering,
- MVC Edit/Display templates for cell markup,
- Partial Views for cell markup,
- HtmlHelper style column configuration
- Fluent configuration
Configuration
To save loads of messy boiler plate code clogging up Controller actions, the tables can be configured at startup.
Any class that inherits TableConfigurator<TType>
can be registered int the global.asax thusly:
- Global.asax
public class MvcApplication : System.Web.HttpApplication
{
protected void Application_Start()
{
//Regular MVC Setup hoo haa
ConfigureMvcTables.InTheSameAssembly.As<MvcApplication>();
}
}
- Usage - Action Method
public ActionResult ListEmployees(TableRequestModel request)
{
var entities = new NorthwindEntities.NorthwindEntities(NorthwindServiceUrl);
return new TableResult<Employee>(entities.Employees, request);
}
- Auto Configuration
public class CategoryTable : MvcTable<Category>
{
public override void Configure(ITableConfiguration<Category> config)
{
config
.SetCssClass("table table-striped")
.ScaffoldAllColumns();
}
}
- Basic Configuration
public class InvoiceTable : MvcTable<Invoice>
{
public override void Configure(ITableConfiguration<Invoice> config)
{
config
.SetCssClass("table table-striped")
.DisplayForColumn(m => m.ProductName)
.DisplayForColumn(m => m.Quantity)
.DisplayForColumn(m => m.Region)
.DisplayForColumn(m => m.Salesperson)
.EditorForColumn(m => m.Discount);
}
}
- More Complex Configuration
public class OrderDetailTable : MvcTable<Order_Detail>
{
public override void Configure(ITableConfiguration<Order_Detail> config)
{
config
.SetCssClass("table table-striped")
.ConfigurePagingControl(p => p.ShowPagingControl(true))
.DisplayForColumn(c => c.Product.ProductName,
cfg => cfg.DefineFooter((h, rows) => rows.Any() ? "Order ID: " + rows.First().OrderID : ""))
.DisplayForColumn(c => c.Quantity)
.DisplayForColumn(c => c.UnitPrice)
.DisplayForColumn(c => c.LineTotal,
cfg => cfg.DefineFooter((h,rows) => rows.Any() ? rows.Sum(od => od.LineTotal).ToString("c") : ""))
.ConfigurePagingControl(p => p.ShowPagingControl(false))
.SetFilterSelector("childFilter");
SetName("ChildOrderDetails");
}
}
- Runtime Configuration Overrides - Action Method
public ActionResult ListEmployees(TableRequestModel request)
{
var entities = new NorthwindEntities.NorthwindEntities(NorthwindServiceUrl);
var result = new TableResult<Employee>(entities.Employees, request);
// Override configuration
result.Overrides.EditorForColumn(d => d.HireDate, cfg => cfg.SetIndex(1));
return result;
}