Skip to content

Commit d81db67

Browse files
committed
Merge pull request mcintyre321#17 from Topkapi/master
Added support for DisplayName data annotation
2 parents b495df8 + 9951545 commit d81db67

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)