Skip to content

Commit 9951545

Browse files
committed
Added support for DisplayNameAttribute
There was no way to change the column headings and it defaulted to showing the property names as the column headings. I have changed that and it now respects the use of DisplayNameAttribute on the model classes.
1 parent b495df8 commit 9951545

File tree

9 files changed

+345
-313
lines changed

9 files changed

+345
-313
lines changed

Mvc.JQuery.Datatables.Example/App_Start/RegisterDatatablesModelBinder.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
namespace Mvc.JQuery.Datatables.Example.App_Start {
88
public static class RegisterDatatablesModelBinder {
99
public static void Start() {
10-
ModelBinders.Binders.Add(typeof(Mvc.JQuery.Datatables.DataTablesParam), new Mvc.JQuery.Datatables.DataTablesModelBinder());
10+
ModelBinders.Binders.Add(typeof(DataTablesParam), new DataTablesModelBinder());
1111
}
1212
}
1313
}

Mvc.JQuery.Datatables.Example/Controllers/HomeController.cs

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
using System;
2-
using System.Collections.Generic;
2+
using System.Collections.Generic;
3+
using System.ComponentModel;
34
using System.Globalization;
45
using System.Linq;
56
using System.Web;
@@ -39,6 +40,7 @@ public DataTablesResult<UserView> GetUsers(DataTablesParam dataTableParam)
3940
Hired = user.Hired
4041
});
4142
}
43+
4244
public DataTablesResult GetUsersUntyped(DataTablesParam dataTableParam)
4345
{
4446
var users = Users();
@@ -79,6 +81,7 @@ public enum Numbers
7981
public class User
8082
{
8183
public int Id { get; set; }
84+
8285
public string Name { get; set; }
8386
public string Email { get; set; }
8487

@@ -91,7 +94,9 @@ public class User
9194

9295
public class UserView
9396
{
94-
public int Id { get; set; }
97+
public int Id { get; set; }
98+
99+
[DisplayName("Full Name")]
95100
public MvcHtmlString Name { get; set; }
96101

97102
public string Email { get; set; }

Mvc.JQuery.Datatables.Example/Mvc.JQuery.Datatables.Example.csproj

Lines changed: 272 additions & 261 deletions
Large diffs are not rendered by default.

Mvc.JQuery.Datatables.Templates/Views/Shared/DataTable.cshtml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,15 +8,15 @@
88
<tr>
99
@foreach (var column in Model.Columns)
1010
{
11-
<th>@column.Item1</th>
11+
<th>@column.Item2</th>
1212
}
1313
</tr>
1414
@if (Model.ColumnFilter)
1515
{
1616
<tr>
1717
@foreach (var column in Model.Columns)
1818
{
19-
<th>@column.Item1</th>
19+
<th>@column.Item2</th>
2020
}
2121
</tr>
2222
}

Mvc.JQuery.Datatables.sln

Lines changed: 32 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -1,32 +1,32 @@
1-
2-
Microsoft Visual Studio Solution File, Format Version 11.00
3-
# Visual Studio 2010
4-
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Mvc.JQuery.Datatables", "Mvc.JQuery.Datatables\Mvc.JQuery.Datatables.csproj", "{389ADE94-7C32-4885-812E-68A2A74C82D8}"
5-
EndProject
6-
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Mvc.JQuery.Datatables.Example", "Mvc.JQuery.Datatables.Example\Mvc.JQuery.Datatables.Example.csproj", "{476D3266-8699-4E89-A528-646C1235EEB1}"
7-
EndProject
8-
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Mvc.JQuery.Datatables.Templates", "Mvc.JQuery.Datatables.Templates\Mvc.JQuery.Datatables.Templates.csproj", "{8DA3D5E6-D714-40C3-B6CB-E88D852C5175}"
9-
EndProject
10-
Global
11-
GlobalSection(SolutionConfigurationPlatforms) = preSolution
12-
Debug|Any CPU = Debug|Any CPU
13-
Release|Any CPU = Release|Any CPU
14-
EndGlobalSection
15-
GlobalSection(ProjectConfigurationPlatforms) = postSolution
16-
{389ADE94-7C32-4885-812E-68A2A74C82D8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
17-
{389ADE94-7C32-4885-812E-68A2A74C82D8}.Debug|Any CPU.Build.0 = Debug|Any CPU
18-
{389ADE94-7C32-4885-812E-68A2A74C82D8}.Release|Any CPU.ActiveCfg = Release|Any CPU
19-
{389ADE94-7C32-4885-812E-68A2A74C82D8}.Release|Any CPU.Build.0 = Release|Any CPU
20-
{476D3266-8699-4E89-A528-646C1235EEB1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
21-
{476D3266-8699-4E89-A528-646C1235EEB1}.Debug|Any CPU.Build.0 = Debug|Any CPU
22-
{476D3266-8699-4E89-A528-646C1235EEB1}.Release|Any CPU.ActiveCfg = Release|Any CPU
23-
{476D3266-8699-4E89-A528-646C1235EEB1}.Release|Any CPU.Build.0 = Release|Any CPU
24-
{8DA3D5E6-D714-40C3-B6CB-E88D852C5175}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
25-
{8DA3D5E6-D714-40C3-B6CB-E88D852C5175}.Debug|Any CPU.Build.0 = Debug|Any CPU
26-
{8DA3D5E6-D714-40C3-B6CB-E88D852C5175}.Release|Any CPU.ActiveCfg = Release|Any CPU
27-
{8DA3D5E6-D714-40C3-B6CB-E88D852C5175}.Release|Any CPU.Build.0 = Release|Any CPU
28-
EndGlobalSection
29-
GlobalSection(SolutionProperties) = preSolution
30-
HideSolutionNode = FALSE
31-
EndGlobalSection
32-
EndGlobal
1+
2+
Microsoft Visual Studio Solution File, Format Version 12.00
3+
# Visual Studio 2012
4+
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Mvc.JQuery.Datatables", "Mvc.JQuery.Datatables\Mvc.JQuery.Datatables.csproj", "{389ADE94-7C32-4885-812E-68A2A74C82D8}"
5+
EndProject
6+
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Mvc.JQuery.Datatables.Example", "Mvc.JQuery.Datatables.Example\Mvc.JQuery.Datatables.Example.csproj", "{476D3266-8699-4E89-A528-646C1235EEB1}"
7+
EndProject
8+
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Mvc.JQuery.Datatables.Templates", "Mvc.JQuery.Datatables.Templates\Mvc.JQuery.Datatables.Templates.csproj", "{8DA3D5E6-D714-40C3-B6CB-E88D852C5175}"
9+
EndProject
10+
Global
11+
GlobalSection(SolutionConfigurationPlatforms) = preSolution
12+
Debug|Any CPU = Debug|Any CPU
13+
Release|Any CPU = Release|Any CPU
14+
EndGlobalSection
15+
GlobalSection(ProjectConfigurationPlatforms) = postSolution
16+
{389ADE94-7C32-4885-812E-68A2A74C82D8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
17+
{389ADE94-7C32-4885-812E-68A2A74C82D8}.Debug|Any CPU.Build.0 = Debug|Any CPU
18+
{389ADE94-7C32-4885-812E-68A2A74C82D8}.Release|Any CPU.ActiveCfg = Release|Any CPU
19+
{389ADE94-7C32-4885-812E-68A2A74C82D8}.Release|Any CPU.Build.0 = Release|Any CPU
20+
{476D3266-8699-4E89-A528-646C1235EEB1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
21+
{476D3266-8699-4E89-A528-646C1235EEB1}.Debug|Any CPU.Build.0 = Debug|Any CPU
22+
{476D3266-8699-4E89-A528-646C1235EEB1}.Release|Any CPU.ActiveCfg = Release|Any CPU
23+
{476D3266-8699-4E89-A528-646C1235EEB1}.Release|Any CPU.Build.0 = Release|Any CPU
24+
{8DA3D5E6-D714-40C3-B6CB-E88D852C5175}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
25+
{8DA3D5E6-D714-40C3-B6CB-E88D852C5175}.Debug|Any CPU.Build.0 = Debug|Any CPU
26+
{8DA3D5E6-D714-40C3-B6CB-E88D852C5175}.Release|Any CPU.ActiveCfg = Release|Any CPU
27+
{8DA3D5E6-D714-40C3-B6CB-E88D852C5175}.Release|Any CPU.Build.0 = Release|Any CPU
28+
EndGlobalSection
29+
GlobalSection(SolutionProperties) = preSolution
30+
HideSolutionNode = FALSE
31+
EndGlobalSection
32+
EndGlobal

Mvc.JQuery.Datatables/DataTableVm.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ static DataTableVm()
1414
public static string DefaultTableClass { get; set; }
1515
public string TableClass { get; set; }
1616

17-
public DataTableVm(string id, string ajaxUrl, IEnumerable<Tuple<string, Type>> columns)
17+
public DataTableVm(string id, string ajaxUrl, IEnumerable<Tuple<string, string, Type>> columns)
1818
{
1919
AjaxUrl = ajaxUrl;
2020
this.Id = id;
@@ -32,7 +32,7 @@ public DataTableVm(string id, string ajaxUrl, IEnumerable<Tuple<string, Type>> c
3232

3333
public string AjaxUrl { get; private set; }
3434

35-
public IEnumerable<Tuple<string, Type>> Columns { get; private set; }
35+
public IEnumerable<Tuple<string, string, Type>> Columns { get; private set; }
3636

3737
public bool ColumnFilter { get; set; }
3838

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

4343
public string ColumnFiltersString
4444
{
45-
get { return string.Join(",", Columns.Select(c => GetFilterType(c.Item1, c.Item2))); }
45+
get { return string.Join(",", Columns.Select(c => GetFilterType(c.Item1, c.Item3))); }
4646
}
4747

4848
public string Dom

Mvc.JQuery.Datatables/DataTablesFilter.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ namespace Mvc.JQuery.Datatables
77
{
88
public class DataTablesFilter
99
{
10-
public IQueryable FilterPagingSortingSearch(DataTablesParam dtParameters, IQueryable data, out int totalRecordsDisplay, Tuple<string, Type>[] columns)
10+
public IQueryable FilterPagingSortingSearch(DataTablesParam dtParameters, IQueryable data, out int totalRecordsDisplay, Tuple<string, string, Type>[] columns)
1111
{
1212
if (!String.IsNullOrEmpty(dtParameters.sSearch))
1313
{
@@ -156,11 +156,11 @@ public static void RegisterFilter<T>(GuardedFilter filter)
156156
Filters.Add(Guard(Is<T>, filter));
157157
}
158158

159-
private static string GetFilterClause(string query, Tuple<string, Type> column, List<object> parametersForLinqQuery)
159+
private static string GetFilterClause(string query, Tuple<string, string, Type> column, List<object> parametersForLinqQuery)
160160
{
161161
foreach (var filter in Filters)
162162
{
163-
var filteredQuery = filter(query, column.Item1, column.Item2, parametersForLinqQuery);
163+
var filteredQuery = filter(query, column.Item1, column.Item3, parametersForLinqQuery);
164164
if (filteredQuery != null)
165165
{
166166
return filteredQuery;

Mvc.JQuery.Datatables/DataTablesHelper.cs

Lines changed: 23 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
11
using System;
2-
using System.Collections.Generic;
2+
using System.Collections.Generic;
3+
using System.ComponentModel;
34
using System.Linq;
4-
using System.Linq.Expressions;
5+
using System.Linq.Expressions;
6+
using System.Reflection;
57
using System.Text;
68
using System.Web;
79
using System.Web.Mvc;
@@ -31,11 +33,25 @@ public static IHtmlString DataTableIncludes(this HtmlHelper helper, bool jqueryU
3133

3234
}
3335

34-
public static DataTableVm DataTableVm<TController, TResult>(this HtmlHelper html, string id, Expression<Func<TController, DataTablesResult<TResult>>> exp, params Tuple<string, Type>[] columns)
36+
public static DataTableVm DataTableVm<TController, TResult>(this HtmlHelper html, string id, Expression<Func<TController, DataTablesResult<TResult>>> exp, params Tuple<string, string, Type>[] columns)
3537
{
36-
if (columns == null || columns.Length == 0)
37-
{
38-
columns = typeof(TResult).GetProperties().Where(p => p.GetGetMethod() != null).Select(p => Tuple.Create(p.Name, p.PropertyType)).ToArray();
38+
if (columns == null || columns.Length == 0)
39+
{
40+
var propInfos = typeof (TResult).GetProperties().Where(p => p.GetGetMethod() != null).ToList();
41+
var columnList = new List<Tuple<string, string, Type>>();
42+
foreach (var propertyInfo in propInfos)
43+
{
44+
var displayNamettribute = (DisplayNameAttribute)propertyInfo.GetCustomAttributes(typeof (DisplayNameAttribute), false).FirstOrDefault();
45+
if(displayNamettribute != null)
46+
{
47+
columnList.Add(Tuple.Create(propertyInfo.Name, displayNamettribute.DisplayName, propertyInfo.PropertyType));
48+
}
49+
else
50+
{
51+
columnList.Add(Tuple.Create(propertyInfo.Name, propertyInfo.Name, propertyInfo.PropertyType));
52+
}
53+
}
54+
columns = columnList.ToArray();
3955
}
4056

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

4965
public static DataTableVm DataTableVm(this HtmlHelper html, string id, string ajaxUrl, params string[] columns)
5066
{
51-
return new DataTableVm(id, ajaxUrl, columns.Select(c => Tuple.Create(c, typeof(string))));
67+
return new DataTableVm(id, ajaxUrl, columns.Select(c => Tuple.Create(c, (string)null, typeof(string))));
5268
}
5369
}
5470
}

Mvc.JQuery.Datatables/DataTablesResult.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ public DataTablesResult(IQueryable<T> q, DataTablesParam dataTableParam, Func<T,
5151
_transform = transform;
5252
var properties = typeof(TRes).GetProperties();
5353

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

8888
int totalRecords = data.Count();

0 commit comments

Comments
 (0)