From 8036aa2db3d2035cd9ff0de3337f2827848ee067 Mon Sep 17 00:00:00 2001 From: Dreiundzwanzig Date: Thu, 10 Oct 2013 14:58:48 +0200 Subject: [PATCH 1/9] Fix for pagination not working --- Mvc.JQuery.Datatables/DataTablesResult.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Mvc.JQuery.Datatables/DataTablesResult.cs b/Mvc.JQuery.Datatables/DataTablesResult.cs index 1cd3066..986cd45 100644 --- a/Mvc.JQuery.Datatables/DataTablesResult.cs +++ b/Mvc.JQuery.Datatables/DataTablesResult.cs @@ -116,7 +116,7 @@ DataTablesData GetResults(IQueryable data, DataTablesParam param) var result = new DataTablesData { iTotalRecords = totalRecords, - iTotalDisplayRecords = page.Length, + iTotalDisplayRecords = filteredData.Count() + param.iDisplayStart, sEcho = param.sEcho, aaData = page.Cast().ToArray() }; From 4216485627b41c89fef71bde7cd23487437f3bbf Mon Sep 17 00:00:00 2001 From: Harry McIntyre Date: Thu, 10 Oct 2013 21:45:22 +0100 Subject: [PATCH 2/9] Tweak for docs and model for language --- .../Views/Home/Index.cshtml | 103 ++++++++++-------- .../Views/Shared/_Layout.cshtml | 12 +- Mvc.JQuery.Datatables/DataTableConfigVm.cs | 1 + Mvc.JQuery.Datatables/Models/oLanguage.cs | 31 ++++++ .../Mvc.JQuery.Datatables.csproj | 1 + 5 files changed, 89 insertions(+), 59 deletions(-) create mode 100644 Mvc.JQuery.Datatables/Models/oLanguage.cs diff --git a/Mvc.JQuery.Datatables.Example/Views/Home/Index.cshtml b/Mvc.JQuery.Datatables.Example/Views/Home/Index.cshtml index 83dd0c8..bac8122 100644 --- a/Mvc.JQuery.Datatables.Example/Views/Home/Index.cshtml +++ b/Mvc.JQuery.Datatables.Example/Views/Home/Index.cshtml @@ -1,7 +1,8 @@ @{ ViewBag.Title = "title"; } -@Html.DataTableIncludes(jqueryUi:true) +@Html.DataTableIncludes(jqueryUi: true) + @@ -10,44 +11,35 @@ Nuget install-package Mvc.JQuery.Datatables

- In the controller: + Create a controller (see example)

-public DataTablesResult<UserView> GetUsers(DataTablesParam dataTableParam)
+public class SomeController : Controller 
 {
-    var users = new List<User>
-    (
-        Enumerable.Range(1, 100).Select(i => new User(){Id = i, Email = "user" + i + "@@gmail.com", Name = "User" + i})
-    ).AsQueryable();
-
-    return DataTablesResult.Create(users, dataTableParam, user => new UserView()
+    ...
+    public DataTablesResult<UserView> GetUsers(DataTablesParam dataTableParam)
     {
-        Id = user.Id,
-        Name = user.Name
-    });
+        IQueryable<User> users = ... //take a queryable from your database...
+        var userViews = users.Select(u => new UserView(u)); //...transform it into a view object ...
+        return DataTablesResult.Create(userViews, dataTableParam)  //...and return a DataTablesResult
+    }
 }
 

-and in the view... - -

-@@using Mvc.JQuery.Datatables
-@@using Mvc.JQuery.Datatables.Example.Controllers
+    and render the partial (see example)
 
-<link type="text/css" href="@@Url.Content("~/Content/DataTables-1.8.2/media/css/demo_table.css")" rel="stylesheet"/>
-<script src="@@Url.Content("~/Scripts/DataTables-1.8.2/media/js/jquery.dataTables.js")" type="text/javascript"></script>
+    
+        //include these scripts
+        <link type="text/css" href="@@Url.Content("~/Content/DataTables-1.8.2/media/css/demo_table.css")" rel="stylesheet"/>
+        <script src="@@Url.Content("~/Scripts/DataTables-1.8.2/media/js/jquery.dataTables.js")" type="text/javascript"></script>
 
-@@Html.Partial("DataTable", Html.DataTableVm("table-id", (HomeController h) => h.GetUsers(null)))
+        @@Html.Partial("DataTable", Html.DataTableVm("table-id", (HomeController h) => h.GetUsers(null)))
 
-can also use 
-
-@@Html.Partial("DataTable", Html.DataTableVm("table-id", "/home/getusers", "Id", "Name", "Email"))
-
+

-

Voila

- +

Voila!

Custom placement for Position filter:
@@ -55,6 +47,7 @@ can also use @using Mvc.JQuery.Datatables @using Mvc.JQuery.Datatables.Example.Controllers +@using Mvc.JQuery.Datatables.Models @{ var vm = Html.DataTableVm("table-id", (HomeController h) => h.GetUsers(null)); //vm.JsOptions.Add("iDisplayLength", 25); @@ -62,37 +55,51 @@ can also use vm.ColumnFilter = true; vm.FilterOn("Position", new { sSelector = "#custom-filter-placeholder-position" }).Select("Engineer", "Tester", "Manager") .FilterOn("Id").NumberRange(); - //.FilterOn("Number").CheckBoxes(Enum.GetNames(typeof(Numbers))); + //.FilterOn("Number").CheckBoxes(Enum.GetNames(typeof(Numbers))); vm.StateSave = true; - //vm.Language = "{ 'sUrl': '" + Url.Content("~/Content/jquery.dataTables.lang.de-DE.txt") + "' }"; - - vm.Language = "{" + - " 'sProcessing': 'Bitte warten...'," + - " 'sLengthMenu': '_MENU_ Einträge anzeigen'," + - " 'sZeroRecords': 'Keine Einträge vorhanden.'," + - " 'sInfo': '_START_ bis _END_ von _TOTAL_ Einträgen'," + - " 'sInfoEmpty': '0 bis 0 von 0 Einträgen'," + - " 'sInfoFiltered': '(gefiltert von _MAX_ Einträgen)'," + - " 'sInfoPostFix': ''," + - " 'sSearch': 'Suchen'," + - " 'sUrl': ''," + - " 'oPaginate': {" + - " 'sFirst': 'Erster'," + - " 'sPrevious': 'Zurück'," + - " 'sNext': 'Weiter'," + - " 'sLast': 'Letzter'" + - " }" + - "}"; + + if (Request.QueryString["lang"] == "de") + { + //vm.Language = "{ 'sUrl': '" + Url.Content("~/Content/jquery.dataTables.lang.de-DE.txt") + "' }"; + vm.Language = new Language + { + sProcessing = "Bitte warten...", + sLengthMenu = "_MENU_ Einträge anzeigen", + sZeroRecords = "Keine Einträge vorhanden.", + sInfo = "_START_ bis _END_ von _TOTAL_ Einträgen", + sInfoEmpty = "0 bis 0 von 0 Einträgen", + sInfoFiltered = "(gefiltert von _MAX_ Einträgen)", + sInfoPostFix = "", + sSearch = "Suchen", + sUrl = "", + oPaginate = new Paginate() + { + sFirst = "Erster", + sPrevious = "Zurück", + sNext = "Weiter", + sLast = "Letzter" + } + }.ToJsonString(); + } } @Html.Partial("DataTable", vm) +
- - +
+ @if (Request.QueryString["lang"] != "de") + { + See table with Language settings applied + } + else + { + Turn off language settings + } +
diff --git a/Mvc.JQuery.Datatables.Example/Views/Shared/_Layout.cshtml b/Mvc.JQuery.Datatables.Example/Views/Shared/_Layout.cshtml index 7d96acb..f7f49ba 100644 --- a/Mvc.JQuery.Datatables.Example/Views/Shared/_Layout.cshtml +++ b/Mvc.JQuery.Datatables.Example/Views/Shared/_Layout.cshtml @@ -54,17 +54,7 @@ -
-
-
-

@Html.ActionLink("My MVC Application", "Index", "Home")

- - @Html.Partial("_LogOnPartial") -
-
-
+
@RenderBody()
diff --git a/Mvc.JQuery.Datatables/DataTableConfigVm.cs b/Mvc.JQuery.Datatables/DataTableConfigVm.cs index f118533..afec191 100644 --- a/Mvc.JQuery.Datatables/DataTableConfigVm.cs +++ b/Mvc.JQuery.Datatables/DataTableConfigVm.cs @@ -3,6 +3,7 @@ using System.Linq; using System.Web.Routing; using System.Web.Script.Serialization; +using Mvc.JQuery.Datatables.Models; namespace Mvc.JQuery.Datatables { diff --git a/Mvc.JQuery.Datatables/Models/oLanguage.cs b/Mvc.JQuery.Datatables/Models/oLanguage.cs new file mode 100644 index 0000000..db58e6f --- /dev/null +++ b/Mvc.JQuery.Datatables/Models/oLanguage.cs @@ -0,0 +1,31 @@ +using System.Web.Script.Serialization; + +namespace Mvc.JQuery.Datatables.Models +{ + public class Paginate + { + public string sFirst { get; set; } + public string sPrevious { get; set; } + public string sNext { get; set; } + public string sLast { get; set; } + } + + public class Language + { + public string sProcessing { get; set; } + public string sLengthMenu { get; set; } + public string sZeroRecords { get; set; } + public string sInfo { get; set; } + public string sInfoEmpty { get; set; } + public string sInfoFiltered { get; set; } + public string sInfoPostFix { get; set; } + public string sSearch { get; set; } + public string sUrl { get; set; } + public Paginate oPaginate { get; set; } + + public string ToJsonString() + { + return new JavaScriptSerializer().Serialize(this); + } + } +} \ No newline at end of file diff --git a/Mvc.JQuery.Datatables/Mvc.JQuery.Datatables.csproj b/Mvc.JQuery.Datatables/Mvc.JQuery.Datatables.csproj index 9d78540..5f39ce1 100644 --- a/Mvc.JQuery.Datatables/Mvc.JQuery.Datatables.csproj +++ b/Mvc.JQuery.Datatables/Mvc.JQuery.Datatables.csproj @@ -61,6 +61,7 @@ + From 87d63ed44192f648708fabdeb98975fa4392b140 Mon Sep 17 00:00:00 2001 From: Harry McIntyre Date: Fri, 11 Oct 2013 09:48:58 +0100 Subject: [PATCH 3/9] Added VPP message back to docs --- Mvc.JQuery.Datatables.Example/Views/Home/Index.cshtml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/Mvc.JQuery.Datatables.Example/Views/Home/Index.cshtml b/Mvc.JQuery.Datatables.Example/Views/Home/Index.cshtml index bac8122..264d0dc 100644 --- a/Mvc.JQuery.Datatables.Example/Views/Home/Index.cshtml +++ b/Mvc.JQuery.Datatables.Example/Views/Home/Index.cshtml @@ -9,6 +9,9 @@

Strongly typed datatable example

 Nuget install-package Mvc.JQuery.Datatables
+    
+Nuget install-package EmbeddedResourceVirtualPathProvider or Nuget install-package Mvc.JQuery.Datatables.Templates
+
 

Create a controller (see example) From 902a7a5a6c4322ca692077a9235f03b429bd9494 Mon Sep 17 00:00:00 2001 From: Harry McIntyre Date: Fri, 11 Oct 2013 14:30:21 +0100 Subject: [PATCH 4/9] Updated nuspec --- .../Mvc.JQuery.Datatables.nuspec | 23 +++++++++++-------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/Mvc.JQuery.Datatables/Mvc.JQuery.Datatables.nuspec b/Mvc.JQuery.Datatables/Mvc.JQuery.Datatables.nuspec index 931d93e..bd84a4a 100644 --- a/Mvc.JQuery.Datatables/Mvc.JQuery.Datatables.nuspec +++ b/Mvc.JQuery.Datatables/Mvc.JQuery.Datatables.nuspec @@ -1,16 +1,19 @@ - $id$ - $version$ - $title$ - $author$ - $author$ - https://github.com/mcintyre321/mvc.jquery.datatables - false - $description$ - Copyright 2011 - jquery datatables iqueryable razor + Mvc.JQuery.Datatables + 1.2.71 + Mvc.JQuery.Datatables + Harry McIntyre + Harry McIntyre + https://github.com/mcintyre321/mvc.jquery.datatables + false + Strongly type html helpers for rendering jquery.datatables tables from IQueryables + Copyright 2011 + jquery datatables iqueryable razor + + + From fccfee643516097ded1c221f6d844bba32699712 Mon Sep 17 00:00:00 2001 From: Harry McIntyre Date: Fri, 11 Oct 2013 14:36:40 +0100 Subject: [PATCH 5/9] Update nuspec --- .../Mvc.JQuery.Datatables.nuspec | 25 ++++++++----------- 1 file changed, 11 insertions(+), 14 deletions(-) diff --git a/Mvc.JQuery.Datatables/Mvc.JQuery.Datatables.nuspec b/Mvc.JQuery.Datatables/Mvc.JQuery.Datatables.nuspec index bd84a4a..a233720 100644 --- a/Mvc.JQuery.Datatables/Mvc.JQuery.Datatables.nuspec +++ b/Mvc.JQuery.Datatables/Mvc.JQuery.Datatables.nuspec @@ -1,21 +1,18 @@ - Mvc.JQuery.Datatables - 1.2.71 - Mvc.JQuery.Datatables - Harry McIntyre - Harry McIntyre - https://github.com/mcintyre321/mvc.jquery.datatables - false - Strongly type html helpers for rendering jquery.datatables tables from IQueryables - Copyright 2011 - jquery datatables iqueryable razor - - - + $id$ + $version$ + $title$ + $author$ + $author$ + https://github.com/mcintyre321/mvc.jquery.datatables + false + $description$ + Copyright 2011 + jquery datatables iqueryable razor - + \ No newline at end of file From c950aba1a5b89c3d1b58c3d950bb8e673d943574 Mon Sep 17 00:00:00 2001 From: Harry McIntyre Date: Fri, 11 Oct 2013 14:40:45 +0100 Subject: [PATCH 6/9] Trying to get the pp to work.. --- .../App_Start/RegisterDatatablesModelBinder.cs.pp | 0 Mvc.JQuery.Datatables/Mvc.JQuery.Datatables.csproj | 2 +- Mvc.JQuery.Datatables/Mvc.JQuery.Datatables.nuspec | 6 +++--- 3 files changed, 4 insertions(+), 4 deletions(-) rename Mvc.JQuery.Datatables/{ => Content}/App_Start/RegisterDatatablesModelBinder.cs.pp (100%) diff --git a/Mvc.JQuery.Datatables/App_Start/RegisterDatatablesModelBinder.cs.pp b/Mvc.JQuery.Datatables/Content/App_Start/RegisterDatatablesModelBinder.cs.pp similarity index 100% rename from Mvc.JQuery.Datatables/App_Start/RegisterDatatablesModelBinder.cs.pp rename to Mvc.JQuery.Datatables/Content/App_Start/RegisterDatatablesModelBinder.cs.pp diff --git a/Mvc.JQuery.Datatables/Mvc.JQuery.Datatables.csproj b/Mvc.JQuery.Datatables/Mvc.JQuery.Datatables.csproj index 5f39ce1..5699c12 100644 --- a/Mvc.JQuery.Datatables/Mvc.JQuery.Datatables.csproj +++ b/Mvc.JQuery.Datatables/Mvc.JQuery.Datatables.csproj @@ -72,7 +72,7 @@ Views\Shared\DataTable.cshtml - + Designer diff --git a/Mvc.JQuery.Datatables/Mvc.JQuery.Datatables.nuspec b/Mvc.JQuery.Datatables/Mvc.JQuery.Datatables.nuspec index a233720..cb3102e 100644 --- a/Mvc.JQuery.Datatables/Mvc.JQuery.Datatables.nuspec +++ b/Mvc.JQuery.Datatables/Mvc.JQuery.Datatables.nuspec @@ -12,7 +12,7 @@ Copyright 2011 jquery datatables iqueryable razor - - - + + + \ No newline at end of file From ec98e4bab6250a0ebccf7fb242a4fd83a496a369 Mon Sep 17 00:00:00 2001 From: Harry McIntyre Date: Fri, 11 Oct 2013 14:48:21 +0100 Subject: [PATCH 7/9] Nuspec blah --- Mvc.JQuery.Datatables/Mvc.JQuery.Datatables.csproj | 4 ++-- Mvc.JQuery.Datatables/Mvc.JQuery.Datatables.nuspec | 3 --- Mvc.JQuery.Datatables/packages.config | 2 +- 3 files changed, 3 insertions(+), 6 deletions(-) diff --git a/Mvc.JQuery.Datatables/Mvc.JQuery.Datatables.csproj b/Mvc.JQuery.Datatables/Mvc.JQuery.Datatables.csproj index 5699c12..4ad4217 100644 --- a/Mvc.JQuery.Datatables/Mvc.JQuery.Datatables.csproj +++ b/Mvc.JQuery.Datatables/Mvc.JQuery.Datatables.csproj @@ -48,8 +48,8 @@ - - ..\packages\WebActivator.1.5\lib\net40\WebActivator.dll + + ..\packages\WebActivatorEx.2.0.3\lib\net40\WebActivatorEx.dll diff --git a/Mvc.JQuery.Datatables/Mvc.JQuery.Datatables.nuspec b/Mvc.JQuery.Datatables/Mvc.JQuery.Datatables.nuspec index cb3102e..62dfbe4 100644 --- a/Mvc.JQuery.Datatables/Mvc.JQuery.Datatables.nuspec +++ b/Mvc.JQuery.Datatables/Mvc.JQuery.Datatables.nuspec @@ -12,7 +12,4 @@ Copyright 2011 jquery datatables iqueryable razor - - - \ No newline at end of file diff --git a/Mvc.JQuery.Datatables/packages.config b/Mvc.JQuery.Datatables/packages.config index 6385f6b..26ea6bf 100644 --- a/Mvc.JQuery.Datatables/packages.config +++ b/Mvc.JQuery.Datatables/packages.config @@ -1,5 +1,5 @@  - + \ No newline at end of file From 2fd5a7e3e4c7e0a681a15eaacc239504a527edb3 Mon Sep 17 00:00:00 2001 From: Harry McIntyre Date: Fri, 11 Oct 2013 15:03:58 +0100 Subject: [PATCH 8/9] Moved modelbinder into project --- .../App_Start/RegisterDatatablesModelBinder.cs | 13 ------------- .../Mvc.JQuery.Datatables.Example.csproj | 4 ---- Mvc.JQuery.Datatables.Example/packages.config | 1 - .../RegisterDatatablesModelBinder.cs.pp | 14 -------------- .../Mvc.JQuery.Datatables.csproj | 12 +----------- .../RegisterDatatablesModelBinder.cs | 15 +++++++++++++++ Mvc.JQuery.Datatables/packages.config | 5 ----- packages/WebActivator.1.5/WebActivator.1.5.nupkg | Bin 8190 -> 0 bytes .../WebActivator.1.5/lib/net40/WebActivator.dll | Bin 9728 -> 0 bytes packages/repositories.config | 1 - 10 files changed, 16 insertions(+), 49 deletions(-) delete mode 100644 Mvc.JQuery.Datatables.Example/App_Start/RegisterDatatablesModelBinder.cs delete mode 100644 Mvc.JQuery.Datatables/Content/App_Start/RegisterDatatablesModelBinder.cs.pp create mode 100644 Mvc.JQuery.Datatables/RegisterDatatablesModelBinder.cs delete mode 100644 Mvc.JQuery.Datatables/packages.config delete mode 100644 packages/WebActivator.1.5/WebActivator.1.5.nupkg delete mode 100644 packages/WebActivator.1.5/lib/net40/WebActivator.dll diff --git a/Mvc.JQuery.Datatables.Example/App_Start/RegisterDatatablesModelBinder.cs b/Mvc.JQuery.Datatables.Example/App_Start/RegisterDatatablesModelBinder.cs deleted file mode 100644 index ffb88f5..0000000 --- a/Mvc.JQuery.Datatables.Example/App_Start/RegisterDatatablesModelBinder.cs +++ /dev/null @@ -1,13 +0,0 @@ -using System.Web; -using System.Web.Mvc; -using System.Web.WebPages; - -[assembly: PreApplicationStartMethod(typeof(Mvc.JQuery.Datatables.Example.App_Start.RegisterDatatablesModelBinder), "Start")] - -namespace Mvc.JQuery.Datatables.Example.App_Start { - public static class RegisterDatatablesModelBinder { - public static void Start() { - ModelBinders.Binders.Add(typeof(DataTablesParam), new DataTablesModelBinder()); - } - } -} diff --git a/Mvc.JQuery.Datatables.Example/Mvc.JQuery.Datatables.Example.csproj b/Mvc.JQuery.Datatables.Example/Mvc.JQuery.Datatables.Example.csproj index f27766b..f4a762a 100644 --- a/Mvc.JQuery.Datatables.Example/Mvc.JQuery.Datatables.Example.csproj +++ b/Mvc.JQuery.Datatables.Example/Mvc.JQuery.Datatables.Example.csproj @@ -76,13 +76,9 @@ - - ..\packages\WebActivator.1.5\lib\net40\WebActivator.dll - - diff --git a/Mvc.JQuery.Datatables.Example/packages.config b/Mvc.JQuery.Datatables.Example/packages.config index efe6314..0ec494d 100644 --- a/Mvc.JQuery.Datatables.Example/packages.config +++ b/Mvc.JQuery.Datatables.Example/packages.config @@ -17,5 +17,4 @@ - \ No newline at end of file diff --git a/Mvc.JQuery.Datatables/Content/App_Start/RegisterDatatablesModelBinder.cs.pp b/Mvc.JQuery.Datatables/Content/App_Start/RegisterDatatablesModelBinder.cs.pp deleted file mode 100644 index 6568901..0000000 --- a/Mvc.JQuery.Datatables/Content/App_Start/RegisterDatatablesModelBinder.cs.pp +++ /dev/null @@ -1,14 +0,0 @@ -using System.Web.Mvc; -using System.Web.WebPages; - - -[assembly: WebActivator.PreApplicationStartMethod(typeof($rootnamespace$.App_Start.RegisterDatatablesModelBinder), "Start")] - -namespace $rootnamespace$.App_Start { - public static class RegisterDatatablesModelBinder { - public static void Start() { - if (!ModelBinders.Binders.ContainsKey(typeof(Mvc.JQuery.Datatables.DataTablesParam))) - ModelBinders.Binders.Add(typeof(Mvc.JQuery.Datatables.DataTablesParam), new Mvc.JQuery.Datatables.DataTablesModelBinder()); - } - } -} diff --git a/Mvc.JQuery.Datatables/Mvc.JQuery.Datatables.csproj b/Mvc.JQuery.Datatables/Mvc.JQuery.Datatables.csproj index 4ad4217..00020e4 100644 --- a/Mvc.JQuery.Datatables/Mvc.JQuery.Datatables.csproj +++ b/Mvc.JQuery.Datatables/Mvc.JQuery.Datatables.csproj @@ -34,10 +34,6 @@ - - True - ..\packages\Microsoft.Web.Infrastructure.1.0.0.0\lib\net40\Microsoft.Web.Infrastructure.dll - @@ -48,9 +44,6 @@ - - ..\packages\WebActivatorEx.2.0.3\lib\net40\WebActivatorEx.dll - @@ -72,10 +65,7 @@ Views\Shared\DataTable.cshtml - - - Designer - + diff --git a/Mvc.JQuery.Datatables/RegisterDatatablesModelBinder.cs b/Mvc.JQuery.Datatables/RegisterDatatablesModelBinder.cs new file mode 100644 index 0000000..4dc0b74 --- /dev/null +++ b/Mvc.JQuery.Datatables/RegisterDatatablesModelBinder.cs @@ -0,0 +1,15 @@ +using System.Web; +using System.Web.Mvc; +using System.Web.WebPages; +using Mvc.JQuery.Datatables; + +[assembly: PreApplicationStartMethod(typeof(RegisterDatatablesModelBinder), "Start")] + +namespace Mvc.JQuery.Datatables { + public static class RegisterDatatablesModelBinder { + public static void Start() { + if (!ModelBinders.Binders.ContainsKey(typeof(DataTablesParam))) + ModelBinders.Binders.Add(typeof(DataTablesParam), new Mvc.JQuery.Datatables.DataTablesModelBinder()); + } + } +} diff --git a/Mvc.JQuery.Datatables/packages.config b/Mvc.JQuery.Datatables/packages.config deleted file mode 100644 index 26ea6bf..0000000 --- a/Mvc.JQuery.Datatables/packages.config +++ /dev/null @@ -1,5 +0,0 @@ - - - - - \ No newline at end of file diff --git a/packages/WebActivator.1.5/WebActivator.1.5.nupkg b/packages/WebActivator.1.5/WebActivator.1.5.nupkg deleted file mode 100644 index e31d7a7c361d0a0ebf54151cb2f9619108a959b4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8190 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 - \ No newline at end of file From b88d8d6d703beca0a321617d60f7a7f6d777a7a1 Mon Sep 17 00:00:00 2001 From: jandic Date: Mon, 14 Oct 2013 13:04:44 +0200 Subject: [PATCH 9/9] Extended to support specification of default column sort order and mRender function specification. mRender function can be used for manipulating cell content on client side (e.g. make it a hyperlink). --- .../Controllers/HomeController.cs | 3 +- .../Views/Home/Index.cshtml | 9 +++-- .../Views/Shared/DataTable.cshtml | 1 + Mvc.JQuery.Datatables.sln.DotSettings.user | 2 +- Mvc.JQuery.Datatables/DataTableConfigVm.cs | 34 ++++++++++++++++--- Mvc.JQuery.Datatables/DataTablesHelper.cs | 4 ++- Mvc.JQuery.Datatables/DataTablesTypeInfo.cs | 9 +++++ 7 files changed, 52 insertions(+), 10 deletions(-) diff --git a/Mvc.JQuery.Datatables.Example/Controllers/HomeController.cs b/Mvc.JQuery.Datatables.Example/Controllers/HomeController.cs index 77a75e1..545d1c5 100644 --- a/Mvc.JQuery.Datatables.Example/Controllers/HomeController.cs +++ b/Mvc.JQuery.Datatables.Example/Controllers/HomeController.cs @@ -51,9 +51,10 @@ public DataTablesResult GetUsers(DataTablesParam dataTableParam) public class UserView { + [DataTables(SortDirection = SortDirection.Ascending)] public int Id { get; set; } - [DataTables( DisplayName = "Full Name")] + [DataTables(DisplayName = "Full Name", MRenderFunction = "test")] public string Name { get; set; } diff --git a/Mvc.JQuery.Datatables.Example/Views/Home/Index.cshtml b/Mvc.JQuery.Datatables.Example/Views/Home/Index.cshtml index 264d0dc..3a2b628 100644 --- a/Mvc.JQuery.Datatables.Example/Views/Home/Index.cshtml +++ b/Mvc.JQuery.Datatables.Example/Views/Home/Index.cshtml @@ -86,14 +86,17 @@ public class SomeController : Controller }.ToJsonString(); } } + + @Html.Partial("DataTable", vm)
- - -

@if (Request.QueryString["lang"] != "de") { diff --git a/Mvc.JQuery.Datatables.Templates/Views/Shared/DataTable.cshtml b/Mvc.JQuery.Datatables.Templates/Views/Shared/DataTable.cshtml index fd5cbd3..3f7ae90 100644 --- a/Mvc.JQuery.Datatables.Templates/Views/Shared/DataTable.cshtml +++ b/Mvc.JQuery.Datatables.Templates/Views/Shared/DataTable.cshtml @@ -35,6 +35,7 @@ } var $table = $('#@Model.Id'); var dt = $table.dataTable({ + "aaSorting": @Html.Raw(Model.ColumnSortingString), "bProcessing": true, "bStateSave": @Html.Raw(Model.StateSave ? "true" : "false"), "bServerSide": true, diff --git a/Mvc.JQuery.Datatables.sln.DotSettings.user b/Mvc.JQuery.Datatables.sln.DotSettings.user index 7f927f9..410b7a4 100644 --- a/Mvc.JQuery.Datatables.sln.DotSettings.user +++ b/Mvc.JQuery.Datatables.sln.DotSettings.user @@ -5,4 +5,4 @@ True True ThingsAreCalledCorrectly - <Session><Elements><UnitTestElement Provider="nUnit" Id="Mvc.JQuery.DataTables.Tests.EntityFramework" type="NUnitTestFixtureElement" Project="53671C41-666D-4269-A12A-BA6C2F209E7A" /><UnitTestElement Provider="nUnit" Id="Mvc.JQuery.DataTables.Tests.FilterTests" type="NUnitTestFixtureElement" Project="53671C41-666D-4269-A12A-BA6C2F209E7A" /><UnitTestElement Provider="nUnit" Id="Mvc.JQuery.DataTables.Tests.Linq" type="NUnitTestFixtureElement" Project="53671C41-666D-4269-A12A-BA6C2F209E7A" /><UnitTestElement Provider="nUnit" Id="Mvc.JQuery.DataTables.Tests.Linq.ExecuteParams" ParentId="Mvc.JQuery.DataTables.Tests.Linq" type="NUnitTestElement" TypeName="Mvc.JQuery.DataTables.Tests.Linq" MethodName="ExecuteParams" Project="53671C41-666D-4269-A12A-BA6C2F209E7A" /><UnitTestElement Provider="nUnit" Id="Mvc.JQuery.DataTables.Tests.EntityFramework.ExecuteParams" ParentId="Mvc.JQuery.DataTables.Tests.EntityFramework" type="NUnitTestElement" TypeName="Mvc.JQuery.DataTables.Tests.EntityFramework" MethodName="ExecuteParams" Project="53671C41-666D-4269-A12A-BA6C2F209E7A" /><UnitTestElement Provider="nUnit" Id="Mvc.JQuery.DataTables.Tests.Linq.ExecuteParamsAndTransform" ParentId="Mvc.JQuery.DataTables.Tests.Linq" type="NUnitTestElement" TypeName="Mvc.JQuery.DataTables.Tests.Linq" MethodName="ExecuteParamsAndTransform" Project="53671C41-666D-4269-A12A-BA6C2F209E7A" /><UnitTestElement Provider="nUnit" Id="Mvc.JQuery.DataTables.Tests.EntityFramework.ExecuteParamsAndTransform" ParentId="Mvc.JQuery.DataTables.Tests.EntityFramework" type="NUnitTestElement" TypeName="Mvc.JQuery.DataTables.Tests.Linq" MethodName="ExecuteParamsAndTransform" Project="53671C41-666D-4269-A12A-BA6C2F209E7A" /><UnitTestElement Provider="nUnit" Id="Mvc.JQuery.DataTables.Tests.FilterTests.SearchQueryTests" ParentId="Mvc.JQuery.DataTables.Tests.FilterTests" type="NUnitTestElement" TypeName="Mvc.JQuery.DataTables.Tests.FilterTests" MethodName="SearchQueryTests" Project="53671C41-666D-4269-A12A-BA6C2F209E7A" /><UnitTestElement Provider="nUnit" Id="Mvc.JQuery.DataTables.Tests.FilterTests.SearchQueryTests(&quot;^123$&quot;,System.Int32,True)" ParentId="Mvc.JQuery.DataTables.Tests.FilterTests.SearchQueryTests" type="NUnitRowTestElement" /><UnitTestElement Provider="nUnit" Id="Mvc.JQuery.DataTables.Tests.FilterTests.SearchQueryTests(&quot;^456$&quot;,System.Int32,False)" ParentId="Mvc.JQuery.DataTables.Tests.FilterTests.SearchQueryTests" type="NUnitRowTestElement" /><UnitTestElement Provider="nUnit" Id="Mvc.JQuery.DataTables.Tests.FilterTests.SearchQueryTests(&quot;^Ched&quot;,System.String,True)" ParentId="Mvc.JQuery.DataTables.Tests.FilterTests.SearchQueryTests" type="NUnitRowTestElement" /><UnitTestElement Provider="nUnit" Id="Mvc.JQuery.DataTables.Tests.FilterTests.SearchQueryTests(&quot;^Cheddar&quot;,System.String,True)" ParentId="Mvc.JQuery.DataTables.Tests.FilterTests.SearchQueryTests" type="NUnitRowTestElement" /><UnitTestElement Provider="nUnit" Id="Mvc.JQuery.DataTables.Tests.FilterTests.SearchQueryTests(&quot;^Cheddar$&quot;,System.String,True)" ParentId="Mvc.JQuery.DataTables.Tests.FilterTests.SearchQueryTests" type="NUnitRowTestElement" /><UnitTestElement Provider="nUnit" Id="Mvc.JQuery.DataTables.Tests.FilterTests.SearchQueryTests(&quot;^False$&quot;,System.Boolean,False)" ParentId="Mvc.JQuery.DataTables.Tests.FilterTests.SearchQueryTests" type="NUnitRowTestElement" /><UnitTestElement Provider="nUnit" Id="Mvc.JQuery.DataTables.Tests.FilterTests.SearchQueryTests(&quot;^True$&quot;,System.Boolean,True)" ParentId="Mvc.JQuery.DataTables.Tests.FilterTests.SearchQueryTests" type="NUnitRowTestElement" /><UnitTestElement Provider="nUnit" Id="Mvc.JQuery.DataTables.Tests.FilterTests.SearchQueryTests(&quot;123&quot;,System.Int32,True)" ParentId="Mvc.JQuery.DataTables.Tests.FilterTests.SearchQueryTests" type="NUnitRowTestElement" /><UnitTestElement Provider="nUnit" Id="Mvc.JQuery.DataTables.Tests.FilterTests.SearchQueryTests(&quot;456&quot;,System.Int32,False)" ParentId="Mvc.JQuery.DataTables.Tests.FilterTests.SearchQueryTests" type="NUnitRowTestElement" /><UnitTestElement Provider="nUnit" Id="Mvc.JQuery.DataTables.Tests.FilterTests.SearchQueryTests(&quot;asdf&quot;,System.String,False)" ParentId="Mvc.JQuery.DataTables.Tests.FilterTests.SearchQueryTests" type="NUnitRowTestElement" /><UnitTestElement Provider="nUnit" Id="Mvc.JQuery.DataTables.Tests.FilterTests.SearchQueryTests(&quot;Cheddar&quot;,System.String,True)" ParentId="Mvc.JQuery.DataTables.Tests.FilterTests.SearchQueryTests" type="NUnitRowTestElement" /><UnitTestElement Provider="nUnit" Id="Mvc.JQuery.DataTables.Tests.FilterTests.SearchQueryTests(&quot;False&quot;,System.Boolean,False)" ParentId="Mvc.JQuery.DataTables.Tests.FilterTests.SearchQueryTests" type="NUnitRowTestElement" /><UnitTestElement Provider="nUnit" Id="Mvc.JQuery.DataTables.Tests.FilterTests.SearchQueryTests(&quot;True&quot;,System.Boolean,True)" ParentId="Mvc.JQuery.DataTables.Tests.FilterTests.SearchQueryTests" type="NUnitRowTestElement" /></Elements></Session> \ No newline at end of file + <Session><Elements><UnitTestElement Provider="nUnit" Id="Mvc.JQuery.DataTables.Tests.EntityFramework" type="NUnitTestFixtureElement" Project="53671C41-666D-4269-A12A-BA6C2F209E7A" /><UnitTestElement Provider="nUnit" Id="Mvc.JQuery.DataTables.Tests.FilterTests" type="NUnitTestFixtureElement" Project="53671C41-666D-4269-A12A-BA6C2F209E7A" /><UnitTestElement Provider="nUnit" Id="Mvc.JQuery.DataTables.Tests.Linq" type="NUnitTestFixtureElement" Project="53671C41-666D-4269-A12A-BA6C2F209E7A" /><UnitTestElement Provider="nUnit" Id="Mvc.JQuery.DataTables.Tests.Linq.ExecuteParams" ParentId="Mvc.JQuery.DataTables.Tests.Linq" type="NUnitTestElement" TypeName="Mvc.JQuery.DataTables.Tests.Linq" MethodName="ExecuteParams" Project="53671C41-666D-4269-A12A-BA6C2F209E7A" /><UnitTestElement Provider="nUnit" Id="Mvc.JQuery.DataTables.Tests.EntityFramework.ExecuteParams" ParentId="Mvc.JQuery.DataTables.Tests.EntityFramework" type="NUnitTestElement" TypeName="Mvc.JQuery.DataTables.Tests.EntityFramework" MethodName="ExecuteParams" Project="53671C41-666D-4269-A12A-BA6C2F209E7A" /><UnitTestElement Provider="nUnit" Id="Mvc.JQuery.DataTables.Tests.Linq.ExecuteParamsAndTransform" ParentId="Mvc.JQuery.DataTables.Tests.Linq" type="NUnitTestElement" TypeName="Mvc.JQuery.DataTables.Tests.Linq" MethodName="ExecuteParamsAndTransform" Project="53671C41-666D-4269-A12A-BA6C2F209E7A" /><UnitTestElement Provider="nUnit" Id="Mvc.JQuery.DataTables.Tests.EntityFramework.ExecuteParamsAndTransform" ParentId="Mvc.JQuery.DataTables.Tests.EntityFramework" type="NUnitTestElement" TypeName="Mvc.JQuery.DataTables.Tests.Linq" MethodName="ExecuteParamsAndTransform" Project="53671C41-666D-4269-A12A-BA6C2F209E7A" /><UnitTestElement Provider="nUnit" Id="Mvc.JQuery.DataTables.Tests.FilterTests.SearchQueryTests" ParentId="Mvc.JQuery.DataTables.Tests.FilterTests" type="NUnitTestElement" TypeName="Mvc.JQuery.DataTables.Tests.FilterTests" MethodName="SearchQueryTests" Project="53671C41-666D-4269-A12A-BA6C2F209E7A" /><UnitTestElement Provider="nUnit" Id="Mvc.JQuery.DataTables.Tests.FilterTests.SearchQueryTests(&quot;^123$&quot;,System.Int32,True)" ParentId="Mvc.JQuery.DataTables.Tests.FilterTests.SearchQueryTests" type="NUnitRowTestElement" /><UnitTestElement Provider="nUnit" Id="Mvc.JQuery.DataTables.Tests.FilterTests.SearchQueryTests(&quot;^456$&quot;,System.Int32,False)" ParentId="Mvc.JQuery.DataTables.Tests.FilterTests.SearchQueryTests" type="NUnitRowTestElement" /><UnitTestElement Provider="nUnit" Id="Mvc.JQuery.DataTables.Tests.FilterTests.SearchQueryTests(&quot;^False$&quot;,System.Boolean,False)" ParentId="Mvc.JQuery.DataTables.Tests.FilterTests.SearchQueryTests" type="NUnitRowTestElement" /><UnitTestElement Provider="nUnit" Id="Mvc.JQuery.DataTables.Tests.FilterTests.SearchQueryTests(&quot;^Ched&quot;,System.String,True)" ParentId="Mvc.JQuery.DataTables.Tests.FilterTests.SearchQueryTests" type="NUnitRowTestElement" /><UnitTestElement Provider="nUnit" Id="Mvc.JQuery.DataTables.Tests.FilterTests.SearchQueryTests(&quot;^Cheddar&quot;,System.String,True)" ParentId="Mvc.JQuery.DataTables.Tests.FilterTests.SearchQueryTests" type="NUnitRowTestElement" /><UnitTestElement Provider="nUnit" Id="Mvc.JQuery.DataTables.Tests.FilterTests.SearchQueryTests(&quot;^Cheddar$&quot;,System.String,True)" ParentId="Mvc.JQuery.DataTables.Tests.FilterTests.SearchQueryTests" type="NUnitRowTestElement" /><UnitTestElement Provider="nUnit" Id="Mvc.JQuery.DataTables.Tests.FilterTests.SearchQueryTests(&quot;^True$&quot;,System.Boolean,True)" ParentId="Mvc.JQuery.DataTables.Tests.FilterTests.SearchQueryTests" type="NUnitRowTestElement" /><UnitTestElement Provider="nUnit" Id="Mvc.JQuery.DataTables.Tests.FilterTests.SearchQueryTests(&quot;123&quot;,System.Int32,True)" ParentId="Mvc.JQuery.DataTables.Tests.FilterTests.SearchQueryTests" type="NUnitRowTestElement" /><UnitTestElement Provider="nUnit" Id="Mvc.JQuery.DataTables.Tests.FilterTests.SearchQueryTests(&quot;456&quot;,System.Int32,False)" ParentId="Mvc.JQuery.DataTables.Tests.FilterTests.SearchQueryTests" type="NUnitRowTestElement" /><UnitTestElement Provider="nUnit" Id="Mvc.JQuery.DataTables.Tests.FilterTests.SearchQueryTests(&quot;asdf&quot;,System.String,False)" ParentId="Mvc.JQuery.DataTables.Tests.FilterTests.SearchQueryTests" type="NUnitRowTestElement" /><UnitTestElement Provider="nUnit" Id="Mvc.JQuery.DataTables.Tests.FilterTests.SearchQueryTests(&quot;False&quot;,System.Boolean,False)" ParentId="Mvc.JQuery.DataTables.Tests.FilterTests.SearchQueryTests" type="NUnitRowTestElement" /><UnitTestElement Provider="nUnit" Id="Mvc.JQuery.DataTables.Tests.FilterTests.SearchQueryTests(&quot;Cheddar&quot;,System.String,True)" ParentId="Mvc.JQuery.DataTables.Tests.FilterTests.SearchQueryTests" type="NUnitRowTestElement" /><UnitTestElement Provider="nUnit" Id="Mvc.JQuery.DataTables.Tests.FilterTests.SearchQueryTests(&quot;True&quot;,System.Boolean,True)" ParentId="Mvc.JQuery.DataTables.Tests.FilterTests.SearchQueryTests" type="NUnitRowTestElement" /></Elements></Session> \ No newline at end of file diff --git a/Mvc.JQuery.Datatables/DataTableConfigVm.cs b/Mvc.JQuery.Datatables/DataTableConfigVm.cs index afec191..19222bb 100644 --- a/Mvc.JQuery.Datatables/DataTableConfigVm.cs +++ b/Mvc.JQuery.Datatables/DataTableConfigVm.cs @@ -15,10 +15,12 @@ public class ColDef public bool Sortable { get; set; } public Type Type { get; set; } public bool Searchable { get; set; } + public SortDirection SortDirection { get; set; } + public string MRenderFunction { get; set; } - public static ColDef Create(string name, string p1, Type propertyType, bool visible = true, bool sortable = true) + public static ColDef Create(string name, string p1, Type propertyType, bool visible = true, bool sortable = true, SortDirection sortDirection = SortDirection.None, string mRenderFunction = null) { - return new ColDef() {Name = name, DisplayName = p1, Type = propertyType, Visible = visible, Sortable = sortable}; + return new ColDef() {Name = name, DisplayName = p1, Type = propertyType, Visible = visible, Sortable = sortable, SortDirection = sortDirection, MRenderFunction = mRenderFunction }; } } public class DataTableConfigVm @@ -107,6 +109,14 @@ public string Dom } } + public string ColumnSortingString + { + get + { + return convertColumnSortingToJson(Columns); + } + } + public bool ShowPageSizes { get; set; } public bool StateSave { get; set; } @@ -244,6 +254,7 @@ private static string convertColumnDefsToJson(IEnumerable columns) var nonSortableColumns = columns.Select((x, idx) => x.Sortable ? -1 : idx).Where( x => x > -1).ToArray(); var nonVisibleColumns = columns.Select((x, idx) => x.Visible ? -1 : idx).Where(x => x > -1).ToArray(); var nonSearchableColumns = columns.Select((x, idx) => x.Searchable ? -1 : idx).Where(x => x > -1).ToArray(); + var mRenderColumns = columns.Select((x, idx) => string.IsNullOrEmpty(x.MRenderFunction) ? new { x.MRenderFunction, Index = -1 } : new { x.MRenderFunction, Index = idx }).Where(x => x.Index > -1).ToArray(); var defs = new List(); @@ -253,9 +264,24 @@ private static string convertColumnDefsToJson(IEnumerable columns) defs.Add(new { bVisible = false, aTargets = nonVisibleColumns }); if (nonSearchableColumns.Any()) defs.Add(new { bSearchable = false, aTargets = nonSearchableColumns }); + if (mRenderColumns.Any()) + foreach (var mRenderColumn in mRenderColumns) + { + defs.Add(new { mRender = "%" + mRenderColumn.MRenderFunction + "%", aTargets = new[] {mRenderColumn.Index} }); + } + + if (defs.Count > 0) + return new JavaScriptSerializer().Serialize(defs).Replace("\"%", "").Replace("%\"", ""); + + return "[]"; + } + + private static string convertColumnSortingToJson(IEnumerable columns) + { + var sortList = columns.Select((c, idx) => c.SortDirection == SortDirection.None ? new dynamic[] { -1, "" } : (c.SortDirection == SortDirection.Ascending ? new dynamic[] { idx, "asc" } : new dynamic[] { idx, "desc" })).Where(x => x[0] > -1).ToArray(); - if (defs.Count > 0) - return new JavaScriptSerializer().Serialize(defs); + if (sortList.Length > 0) + return new JavaScriptSerializer().Serialize(sortList); return "[]"; } diff --git a/Mvc.JQuery.Datatables/DataTablesHelper.cs b/Mvc.JQuery.Datatables/DataTablesHelper.cs index 029aabc..dd5d17a 100644 --- a/Mvc.JQuery.Datatables/DataTablesHelper.cs +++ b/Mvc.JQuery.Datatables/DataTablesHelper.cs @@ -47,7 +47,9 @@ public static DataTableConfigVm DataTableVm(this HtmlHelpe Sortable = pi.Item2.Sortable, Visible = pi.Item2.Visible, Searchable = pi.Item2.Searchable, - Type = pi.Item1.PropertyType + Type = pi.Item1.PropertyType, + SortDirection = pi.Item2.SortDirection, + MRenderFunction = pi.Item2.MRenderFunction }); } columns = columnList.ToArray(); diff --git a/Mvc.JQuery.Datatables/DataTablesTypeInfo.cs b/Mvc.JQuery.Datatables/DataTablesTypeInfo.cs index 69c71cd..89add0f 100644 --- a/Mvc.JQuery.Datatables/DataTablesTypeInfo.cs +++ b/Mvc.JQuery.Datatables/DataTablesTypeInfo.cs @@ -56,7 +56,16 @@ public DataTablesAttribute() public bool Sortable { get; set; } public int? Order { get; set; } public string DisplayName { get; set; } + public SortDirection SortDirection { get; set; } + public string MRenderFunction { get; set; } public bool Visible { get; set; } } + + public enum SortDirection + { + None, + Ascending, + Descending + } } \ No newline at end of file