Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
namespace Mvc.JQuery.Datatables.Example.App_Start {
public static class RegisterDatatablesModelBinder {
public static void Start() {
ModelBinders.Binders.Add(typeof(Mvc.JQuery.Datatables.DataTablesParam), new Mvc.JQuery.Datatables.DataTablesModelBinder());
ModelBinders.Binders.Add(typeof(DataTablesParam), new DataTablesModelBinder());
}
}
}
9 changes: 7 additions & 2 deletions Mvc.JQuery.Datatables.Example/Controllers/HomeController.cs
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
using System;
using System.Collections.Generic;
using System.Collections.Generic;
using System.ComponentModel;
using System.Globalization;
using System.Linq;
using System.Web;
Expand Down Expand Up @@ -39,6 +40,7 @@ public DataTablesResult<UserView> GetUsers(DataTablesParam dataTableParam)
Hired = user.Hired
});
}

public DataTablesResult GetUsersUntyped(DataTablesParam dataTableParam)
{
var users = Users();
Expand Down Expand Up @@ -79,6 +81,7 @@ public enum Numbers
public class User
{
public int Id { get; set; }

public string Name { get; set; }
public string Email { get; set; }

Expand All @@ -91,7 +94,9 @@ public class User

public class UserView
{
public int Id { get; set; }
public int Id { get; set; }

[DisplayName("Full Name")]
public MvcHtmlString Name { get; set; }

public string Email { get; set; }
Expand Down
533 changes: 272 additions & 261 deletions Mvc.JQuery.Datatables.Example/Mvc.JQuery.Datatables.Example.csproj

Large diffs are not rendered by default.

4 changes: 2 additions & 2 deletions Mvc.JQuery.Datatables.Templates/Views/Shared/DataTable.cshtml
Original file line number Diff line number Diff line change
Expand Up @@ -8,15 +8,15 @@
<tr>
@foreach (var column in Model.Columns)
{
<th>@column.Item1</th>
<th>@column.Item2</th>
}
</tr>
@if (Model.ColumnFilter)
{
<tr>
@foreach (var column in Model.Columns)
{
<th>@column.Item1</th>
<th>@column.Item2</th>
}
</tr>
}
Expand Down
64 changes: 32 additions & 32 deletions Mvc.JQuery.Datatables.sln
Original file line number Diff line number Diff line change
@@ -1,32 +1,32 @@

Microsoft Visual Studio Solution File, Format Version 11.00
# Visual Studio 2010
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Mvc.JQuery.Datatables", "Mvc.JQuery.Datatables\Mvc.JQuery.Datatables.csproj", "{389ADE94-7C32-4885-812E-68A2A74C82D8}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Mvc.JQuery.Datatables.Example", "Mvc.JQuery.Datatables.Example\Mvc.JQuery.Datatables.Example.csproj", "{476D3266-8699-4E89-A528-646C1235EEB1}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Mvc.JQuery.Datatables.Templates", "Mvc.JQuery.Datatables.Templates\Mvc.JQuery.Datatables.Templates.csproj", "{8DA3D5E6-D714-40C3-B6CB-E88D852C5175}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Release|Any CPU = Release|Any CPU
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{389ADE94-7C32-4885-812E-68A2A74C82D8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{389ADE94-7C32-4885-812E-68A2A74C82D8}.Debug|Any CPU.Build.0 = Debug|Any CPU
{389ADE94-7C32-4885-812E-68A2A74C82D8}.Release|Any CPU.ActiveCfg = Release|Any CPU
{389ADE94-7C32-4885-812E-68A2A74C82D8}.Release|Any CPU.Build.0 = Release|Any CPU
{476D3266-8699-4E89-A528-646C1235EEB1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{476D3266-8699-4E89-A528-646C1235EEB1}.Debug|Any CPU.Build.0 = Debug|Any CPU
{476D3266-8699-4E89-A528-646C1235EEB1}.Release|Any CPU.ActiveCfg = Release|Any CPU
{476D3266-8699-4E89-A528-646C1235EEB1}.Release|Any CPU.Build.0 = Release|Any CPU
{8DA3D5E6-D714-40C3-B6CB-E88D852C5175}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{8DA3D5E6-D714-40C3-B6CB-E88D852C5175}.Debug|Any CPU.Build.0 = Debug|Any CPU
{8DA3D5E6-D714-40C3-B6CB-E88D852C5175}.Release|Any CPU.ActiveCfg = Release|Any CPU
{8DA3D5E6-D714-40C3-B6CB-E88D852C5175}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
EndGlobal

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 2012
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Mvc.JQuery.Datatables", "Mvc.JQuery.Datatables\Mvc.JQuery.Datatables.csproj", "{389ADE94-7C32-4885-812E-68A2A74C82D8}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Mvc.JQuery.Datatables.Example", "Mvc.JQuery.Datatables.Example\Mvc.JQuery.Datatables.Example.csproj", "{476D3266-8699-4E89-A528-646C1235EEB1}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Mvc.JQuery.Datatables.Templates", "Mvc.JQuery.Datatables.Templates\Mvc.JQuery.Datatables.Templates.csproj", "{8DA3D5E6-D714-40C3-B6CB-E88D852C5175}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Release|Any CPU = Release|Any CPU
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{389ADE94-7C32-4885-812E-68A2A74C82D8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{389ADE94-7C32-4885-812E-68A2A74C82D8}.Debug|Any CPU.Build.0 = Debug|Any CPU
{389ADE94-7C32-4885-812E-68A2A74C82D8}.Release|Any CPU.ActiveCfg = Release|Any CPU
{389ADE94-7C32-4885-812E-68A2A74C82D8}.Release|Any CPU.Build.0 = Release|Any CPU
{476D3266-8699-4E89-A528-646C1235EEB1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{476D3266-8699-4E89-A528-646C1235EEB1}.Debug|Any CPU.Build.0 = Debug|Any CPU
{476D3266-8699-4E89-A528-646C1235EEB1}.Release|Any CPU.ActiveCfg = Release|Any CPU
{476D3266-8699-4E89-A528-646C1235EEB1}.Release|Any CPU.Build.0 = Release|Any CPU
{8DA3D5E6-D714-40C3-B6CB-E88D852C5175}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{8DA3D5E6-D714-40C3-B6CB-E88D852C5175}.Debug|Any CPU.Build.0 = Debug|Any CPU
{8DA3D5E6-D714-40C3-B6CB-E88D852C5175}.Release|Any CPU.ActiveCfg = Release|Any CPU
{8DA3D5E6-D714-40C3-B6CB-E88D852C5175}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
EndGlobal
6 changes: 3 additions & 3 deletions Mvc.JQuery.Datatables/DataTableVm.cs
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ static DataTableVm()
public static string DefaultTableClass { get; set; }
public string TableClass { get; set; }

public DataTableVm(string id, string ajaxUrl, IEnumerable<Tuple<string, Type>> columns)
public DataTableVm(string id, string ajaxUrl, IEnumerable<Tuple<string, string, Type>> columns)
{
AjaxUrl = ajaxUrl;
this.Id = id;
Expand All @@ -32,7 +32,7 @@ public DataTableVm(string id, string ajaxUrl, IEnumerable<Tuple<string, Type>> c

public string AjaxUrl { get; private set; }

public IEnumerable<Tuple<string, Type>> Columns { get; private set; }
public IEnumerable<Tuple<string, string, Type>> Columns { get; private set; }

public bool ColumnFilter { get; set; }

Expand All @@ -42,7 +42,7 @@ public DataTableVm(string id, string ajaxUrl, IEnumerable<Tuple<string, Type>> c

public string ColumnFiltersString
{
get { return string.Join(",", Columns.Select(c => GetFilterType(c.Item1, c.Item2))); }
get { return string.Join(",", Columns.Select(c => GetFilterType(c.Item1, c.Item3))); }
}

public string Dom
Expand Down
6 changes: 3 additions & 3 deletions Mvc.JQuery.Datatables/DataTablesFilter.cs
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ namespace Mvc.JQuery.Datatables
{
public class DataTablesFilter
{
public IQueryable FilterPagingSortingSearch(DataTablesParam dtParameters, IQueryable data, out int totalRecordsDisplay, Tuple<string, Type>[] columns)
public IQueryable FilterPagingSortingSearch(DataTablesParam dtParameters, IQueryable data, out int totalRecordsDisplay, Tuple<string, string, Type>[] columns)
{
if (!String.IsNullOrEmpty(dtParameters.sSearch))
{
Expand Down Expand Up @@ -156,11 +156,11 @@ public static void RegisterFilter<T>(GuardedFilter filter)
Filters.Add(Guard(Is<T>, filter));
}

private static string GetFilterClause(string query, Tuple<string, Type> column, List<object> parametersForLinqQuery)
private static string GetFilterClause(string query, Tuple<string, string, Type> column, List<object> parametersForLinqQuery)
{
foreach (var filter in Filters)
{
var filteredQuery = filter(query, column.Item1, column.Item2, parametersForLinqQuery);
var filteredQuery = filter(query, column.Item1, column.Item3, parametersForLinqQuery);
if (filteredQuery != null)
{
return filteredQuery;
Expand Down
30 changes: 23 additions & 7 deletions Mvc.JQuery.Datatables/DataTablesHelper.cs
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
using System;
using System.Collections.Generic;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Linq.Expressions;
using System.Linq.Expressions;
using System.Reflection;
using System.Text;
using System.Web;
using System.Web.Mvc;
Expand Down Expand Up @@ -31,11 +33,25 @@ public static IHtmlString DataTableIncludes(this HtmlHelper helper, bool jqueryU

}

public static DataTableVm DataTableVm<TController, TResult>(this HtmlHelper html, string id, Expression<Func<TController, DataTablesResult<TResult>>> exp, params Tuple<string, Type>[] columns)
public static DataTableVm DataTableVm<TController, TResult>(this HtmlHelper html, string id, Expression<Func<TController, DataTablesResult<TResult>>> exp, params Tuple<string, string, Type>[] columns)
{
if (columns == null || columns.Length == 0)
{
columns = typeof(TResult).GetProperties().Where(p => p.GetGetMethod() != null).Select(p => Tuple.Create(p.Name, p.PropertyType)).ToArray();
if (columns == null || columns.Length == 0)
{
var propInfos = typeof (TResult).GetProperties().Where(p => p.GetGetMethod() != null).ToList();
var columnList = new List<Tuple<string, string, Type>>();
foreach (var propertyInfo in propInfos)
{
var displayNamettribute = (DisplayNameAttribute)propertyInfo.GetCustomAttributes(typeof (DisplayNameAttribute), false).FirstOrDefault();
if(displayNamettribute != null)
{
columnList.Add(Tuple.Create(propertyInfo.Name, displayNamettribute.DisplayName, propertyInfo.PropertyType));
}
else
{
columnList.Add(Tuple.Create(propertyInfo.Name, propertyInfo.Name, propertyInfo.PropertyType));
}
}
columns = columnList.ToArray();
}

var mi = exp.MethodInfo();
Expand All @@ -48,7 +64,7 @@ public static DataTableVm DataTableVm<TController, TResult>(this HtmlHelper html

public static DataTableVm DataTableVm(this HtmlHelper html, string id, string ajaxUrl, params string[] columns)
{
return new DataTableVm(id, ajaxUrl, columns.Select(c => Tuple.Create(c, typeof(string))));
return new DataTableVm(id, ajaxUrl, columns.Select(c => Tuple.Create(c, (string)null, typeof(string))));
}
}
}
4 changes: 2 additions & 2 deletions Mvc.JQuery.Datatables/DataTablesResult.cs
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@ public DataTablesResult(IQueryable<T> q, DataTablesParam dataTableParam, Func<T,
_transform = transform;
var properties = typeof(TRes).GetProperties();

var content = GetResults(q, dataTableParam, properties.Select(p => Tuple.Create(p.Name, p.PropertyType)).ToArray());
var content = GetResults(q, dataTableParam, properties.Select(p => Tuple.Create(p.Name, (string)null, p.PropertyType)).ToArray());
this.Data = content;
this.JsonRequestBehavior = JsonRequestBehavior.DenyGet;
}
Expand Down Expand Up @@ -82,7 +82,7 @@ public static void RegisterFilter<TVal>(GuardedValueTransformer<TVal> filter)
{
PropertyTransformers.Add(Guard<TVal>(filter));
}
private DataTablesData GetResults(IQueryable<T> data, DataTablesParam param, Tuple<string, Type>[] searchColumns)
private DataTablesData GetResults(IQueryable<T> data, DataTablesParam param, Tuple<string, string, Type>[] searchColumns)
{

int totalRecords = data.Count();
Expand Down