diff --git a/Mvc.JQuery.DataTables/Mvc.JQuery.DataTables.csproj b/Mvc.JQuery.DataTables/Mvc.JQuery.DataTables.csproj
new file mode 100644
index 0000000..db66dc4
--- /dev/null
+++ b/Mvc.JQuery.DataTables/Mvc.JQuery.DataTables.csproj
@@ -0,0 +1,36 @@
+
+
+
+ net451
+ Mvc.JQuery.DataTables
+ Mvc.JQuery.DataTables
+ Mvc.JQuery.DataTables
+
+ 1.0.0
+ Harry McIntyre
+ Popular lib for using DataTables.net with IQueryable. Install this package to use with MVC5
+ false
+ https://github.com/mcintyre321/mvc.jquery.datatables
+ Harry McIntyre
+ jquery datatables iqueryable razor asp mvc mvc5
+ https://github.com/mcintyre321/mvc.jquery.datatables/blob/master/License.txt
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Mvc.JQuery.Datatables/DataTablesModelBinder.cs b/Mvc.JQuery.Datatables/DataTablesModelBinder.cs
index 1a6a285..106a747 100644
--- a/Mvc.JQuery.Datatables/DataTablesModelBinder.cs
+++ b/Mvc.JQuery.Datatables/DataTablesModelBinder.cs
@@ -1,4 +1,6 @@
using System;
+using System.Web.Http.Controllers;
+using System.Web.Http.ModelBinding;
using System.Web.Mvc;
using Mvc.JQuery.DataTables;
@@ -7,12 +9,17 @@ namespace Mvc.JQuery.DataTables
///
/// Model binder for datatables.js parameters a la http://geeksprogramando.blogspot.com/2011/02/jquery-datatables-plug-in-with-asp-mvc.html
///
- public class DataTablesModelBinder : IModelBinder
+ public class DataTablesModelBinder : System.Web.Mvc.IModelBinder, System.Web.Http.ModelBinding.IModelBinder
{
- public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
+ public object BindModel(ControllerContext controllerContext, System.Web.Mvc.ModelBindingContext bindingContext)
{
- var valueProvider = bindingContext.ValueProvider;
- int columns = GetValue(valueProvider, "iColumns");
+ IGenericValueProvider valueProvider = new MvcValueProvider(bindingContext.ValueProvider);
+ return Bind(valueProvider);
+ }
+
+ private object Bind(IGenericValueProvider valueProvider)
+ {
+ int columns = valueProvider.GetValue("iColumns");
if (columns == 0)
{
return BindV10Model(valueProvider);
@@ -23,28 +30,28 @@ public object BindModel(ControllerContext controllerContext, ModelBindingContext
}
}
- private object BindV10Model(IValueProvider valueProvider)
+ private object BindV10Model(IGenericValueProvider valueProvider)
{
DataTablesParam obj = new DataTablesParam();
- obj.iDisplayStart = GetValue(valueProvider, "start");
- obj.iDisplayLength = GetValue(valueProvider, "length");
- obj.sSearch = GetValue(valueProvider, "search[value]");
- obj.bEscapeRegex = GetValue(valueProvider, "search[regex]");
- obj.sEcho = GetValue(valueProvider, "draw");
+ obj.iDisplayStart = valueProvider.GetValue( "start");
+ obj.iDisplayLength = valueProvider.GetValue( "length");
+ obj.sSearch = valueProvider.GetValue( "search[value]");
+ obj.bEscapeRegex = valueProvider.GetValue( "search[regex]");
+ obj.sEcho = valueProvider.GetValue( "draw");
int colIdx = 0;
while (true)
{
string colPrefix = String.Format("columns[{0}]", colIdx);
- string colName = GetValue(valueProvider, colPrefix+"[data]");
+ string colName = valueProvider.GetValue( colPrefix+"[data]");
if (String.IsNullOrWhiteSpace(colName)) {
break;
}
obj.sColumnNames.Add(colName);
- obj.bSortable.Add(GetValue(valueProvider, colPrefix+"[orderable]"));
- obj.bSearchable.Add(GetValue(valueProvider, colPrefix+"[searchable]"));
- obj.sSearchValues.Add(GetValue(valueProvider, colPrefix+"[search][value]"));
- obj.bEscapeRegexColumns.Add(GetValue(valueProvider, colPrefix+"[searchable][regex]"));
+ obj.bSortable.Add(valueProvider.GetValue( colPrefix+"[orderable]"));
+ obj.bSearchable.Add(valueProvider.GetValue( colPrefix+"[searchable]"));
+ obj.sSearchValues.Add(valueProvider.GetValue( colPrefix+"[search][value]"));
+ obj.bEscapeRegexColumns.Add(valueProvider.GetValue( colPrefix+"[searchable][regex]"));
colIdx++;
}
obj.iColumns = colIdx;
@@ -52,11 +59,11 @@ private object BindV10Model(IValueProvider valueProvider)
while (true)
{
string colPrefix = String.Format("order[{0}]", colIdx);
- int? orderColumn = GetValue(valueProvider, colPrefix+"[column]");
+ int? orderColumn = valueProvider.GetValue( colPrefix+"[column]");
if (orderColumn.HasValue)
{
obj.iSortCol.Add(orderColumn.Value);
- obj.sSortDir.Add(GetValue(valueProvider, colPrefix+"[dir]"));
+ obj.sSortDir.Add(valueProvider.GetValue( colPrefix+"[dir]"));
colIdx++;
}
else
@@ -68,35 +75,35 @@ private object BindV10Model(IValueProvider valueProvider)
return obj;
}
- private DataTablesParam BindLegacyModel(IValueProvider valueProvider, int columns)
+ private DataTablesParam BindLegacyModel(IGenericValueProvider valueProvider, int columns)
{
DataTablesParam obj = new DataTablesParam(columns);
- obj.iDisplayStart = GetValue(valueProvider, "iDisplayStart");
- obj.iDisplayLength = GetValue(valueProvider, "iDisplayLength");
- obj.sSearch = GetValue(valueProvider, "sSearch");
- obj.bEscapeRegex = GetValue(valueProvider, "bEscapeRegex");
- obj.iSortingCols = GetValue(valueProvider, "iSortingCols");
- obj.sEcho = GetValue(valueProvider, "sEcho");
+ obj.iDisplayStart = valueProvider.GetValue( "iDisplayStart");
+ obj.iDisplayLength = valueProvider.GetValue( "iDisplayLength");
+ obj.sSearch = valueProvider.GetValue( "sSearch");
+ obj.bEscapeRegex = valueProvider.GetValue( "bEscapeRegex");
+ obj.iSortingCols = valueProvider.GetValue( "iSortingCols");
+ obj.sEcho = valueProvider.GetValue( "sEcho");
for (int i = 0; i < obj.iColumns; i++)
{
- obj.bSortable.Add(GetValue(valueProvider, "bSortable_" + i));
- obj.bSearchable.Add(GetValue(valueProvider, "bSearchable_" + i));
- obj.sSearchValues.Add(GetValue(valueProvider, "sSearch_" + i));
- obj.bEscapeRegexColumns.Add(GetValue(valueProvider, "bEscapeRegex_" + i));
- obj.iSortCol.Add(GetValue(valueProvider, "iSortCol_" + i));
- obj.sSortDir.Add(GetValue(valueProvider, "sSortDir_" + i));
+ obj.bSortable.Add(valueProvider.GetValue( "bSortable_" + i));
+ obj.bSearchable.Add(valueProvider.GetValue( "bSearchable_" + i));
+ obj.sSearchValues.Add(valueProvider.GetValue( "sSearch_" + i));
+ obj.bEscapeRegexColumns.Add(valueProvider.GetValue( "bEscapeRegex_" + i));
+ obj.iSortCol.Add(valueProvider.GetValue( "iSortCol_" + i));
+ obj.sSortDir.Add(valueProvider.GetValue( "sSortDir_" + i));
}
return obj;
}
-
- private static T GetValue(IValueProvider valueProvider, string key)
+
+ public bool BindModel(HttpActionContext actionContext, System.Web.Http.ModelBinding.ModelBindingContext bindingContext)
{
- ValueProviderResult valueResult = valueProvider.GetValue(key);
- return (valueResult==null)
- ? default(T)
- : (T)valueResult.ConvertTo(typeof(T));
+ IGenericValueProvider valueProvider = new WebApiValueProvider(bindingContext.ValueProvider);
+ bindingContext.Model = Bind(valueProvider);
+ return true;
+
}
}
}
\ No newline at end of file
diff --git a/Mvc.JQuery.Datatables/IGenericValueProvider.cs b/Mvc.JQuery.Datatables/IGenericValueProvider.cs
new file mode 100644
index 0000000..16bdc91
--- /dev/null
+++ b/Mvc.JQuery.Datatables/IGenericValueProvider.cs
@@ -0,0 +1,7 @@
+namespace Mvc.JQuery.DataTables
+{
+ public interface IGenericValueProvider
+ {
+ T GetValue(string v);
+ }
+}
\ 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 6f888d0..db66dc4 100644
--- a/Mvc.JQuery.Datatables/Mvc.JQuery.Datatables.csproj
+++ b/Mvc.JQuery.Datatables/Mvc.JQuery.Datatables.csproj
@@ -19,6 +19,7 @@
+
diff --git a/Mvc.JQuery.Datatables/MvcValueProvider.cs b/Mvc.JQuery.Datatables/MvcValueProvider.cs
new file mode 100644
index 0000000..10adaab
--- /dev/null
+++ b/Mvc.JQuery.Datatables/MvcValueProvider.cs
@@ -0,0 +1,26 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Web.Mvc;
+
+namespace Mvc.JQuery.DataTables
+{
+ public class MvcValueProvider : IGenericValueProvider
+ {
+ private IValueProvider _valueProvider;
+
+ public MvcValueProvider(System.Web.Mvc.IValueProvider valueProvider)
+ {
+ this._valueProvider = valueProvider;
+ }
+ public T GetValue(string key)
+ {
+ ValueProviderResult valueResult = _valueProvider.GetValue(key);
+ return (valueResult == null)
+ ? default(T)
+ : (T)valueResult.ConvertTo(typeof(T));
+ }
+ }
+}
diff --git a/Mvc.JQuery.Datatables/WebApiValueProvider.cs b/Mvc.JQuery.Datatables/WebApiValueProvider.cs
new file mode 100644
index 0000000..2566e7c
--- /dev/null
+++ b/Mvc.JQuery.Datatables/WebApiValueProvider.cs
@@ -0,0 +1,26 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Web.Http.ValueProviders;
+
+namespace Mvc.JQuery.DataTables
+{
+ public class WebApiValueProvider : IGenericValueProvider
+ {
+ private IValueProvider _valueProvider;
+
+ public WebApiValueProvider(IValueProvider valueProvider)
+ {
+ this._valueProvider = valueProvider;
+ }
+ public T GetValue(string key)
+ {
+ ValueProviderResult valueResult = _valueProvider.GetValue(key);
+ return (valueResult == null)
+ ? default(T)
+ : (T)valueResult.ConvertTo(typeof(T));
+ }
+ }
+}