Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
ASP.NET MVC WebGrid上的客户端排序_Asp.net_Asp.net Mvc - Fatal编程技术网

ASP.NET MVC WebGrid上的客户端排序

ASP.NET MVC WebGrid上的客户端排序,asp.net,asp.net-mvc,Asp.net,Asp.net Mvc,我有一个包含MVC WebGrid的局部视图,如下所示 <div id="grid"> @{ var grid = new WebGrid(source: Model.Items, defaultSort: "Name", rowsPerPage: 100);

我有一个包含MVC WebGrid的局部视图,如下所示

 <div id="grid">
            @{
                var grid = new WebGrid(source: Model.Items,
                                       defaultSort: "Name", 
                                       rowsPerPage: 100);


            }
            @grid.GetHtml(columns: grid.Columns(
                        grid.Column(columnName: "Name", header: "Name", canSort:true),
                        grid.Column(columnName: "Code", header: "Code")
                    ))
            </div>

@{
var grid=new WebGrid(来源:Model.Items,
defaultSort:“名称”,
行数:100);
}
@GetHtml(列:grid.columns(
grid.Column(columnName:“Name”,header:“Name”,canSort:true),
grid.Column(columnName:“Code”,header:“Code”)
))
这个部分视图是使用jqueryajax调用加载的,结果被插入到主页的DIV中

表呈现良好,但我的问题是排序总是生成对服务器的回调。我希望排序只在客户端进行。使用WebGrid而不使用外部数据表(如jQuery datatable)是否可能


提前感谢您

您可能应该根据加载的表自己实现Cline-Side排序。请看一看

注意!:通过使用html属性来标记WebGrid,您可以使它更通用。 用“data clinesideshot=true”标记该表,然后添加一个jquery事件,该事件将JS功能附加到包含此属性的所有此类表上

 function SortTable(sortOn)
 {
     var table = document.getElementById('results');
     var tbody = table.getElementsByTagName('tbody')[0];
     var rows = tbody.getElementsByTagName('tr');

     var rowArray = new Array();
     for (var i = 0, length = rows.length; i < length; i++)
     {
         rowArray[i] = new Object;
         rowArray[i].oldIndex = i;
         rowArray[i].value = rows[i].getElementsByTagName('td')[sortOn].firstChild.nodeValue;
     }

     if (sortOn == sortedOn)         {
         rowArray.reverse();
     }
     else         {
         sortedOn = sortOn;
         /*
    Decide which function to use from the three:RowCompareNumbers,
    RowCompareDollars or RowCompare (default).
    For first column, I needed numeric comparison.
    */
         if (sortedOn == 0)             {
             rowArray.sort(RowCompareNumbers);
         }
         else             {
             rowArray.sort(RowCompare);
         }
     }

     var newTbody = document.createElement('tbody');
     for (var i = 0, length = rowArray.length; i < length; i++)
     {
         newTbody.appendChild(rows[rowArray[i].oldIndex].cloneNode(true));
     }

     table.replaceChild(newTbody, tbody);
 }

 function RowCompare(a, b)
 {
     var aVal = a.value;
     var bVal = b.value;
     return (aVal == bVal ? 0 : (aVal > bVal ? 1 : -1));
 }

 // Compare number
 function RowCompareNumbers(a, b)
 {
     var aVal = parseInt(a.value);
     var bVal = parseInt(b.value);
     return (aVal - bVal);
 }

 // compare currency
 function RowCompareDollars(a, b)
 {
     var aVal = parseFloat(a.value.substr(1));
     var bVal = parseFloat(b.value.substr(1));
     return (aVal - bVal);
 }
函数排序表(sortOn)
{
var table=document.getElementById('results');
var tbody=table.getElementsByTagName('tbody')[0];
var rows=tbody.getElementsByTagName('tr');
var rowArray=新数组();
for(变量i=0,长度=rows.length;ibVal?1:-1));
}
//比较数字
函数行比较枚举数(a、b)
{
var aVal=parseInt(a.value);
var bVal=parseInt(b.值);
返回(aVal-bVal);
}
//比较货币
函数行比较计算器(a、b)
{
var aVal=parseFloat(a.value.substr(1));
var bVal=parseFloat(b.value.substr(1));
返回(aVal-bVal);
}

您可能应该根据加载的表自己实现Cline-Side排序看看

注意!:通过使用html属性来标记WebGrid,您可以使它更通用。 用“data clinesideshot=true”标记该表,然后添加一个jquery事件,该事件将JS功能附加到包含此属性的所有此类表上

 function SortTable(sortOn)
 {
     var table = document.getElementById('results');
     var tbody = table.getElementsByTagName('tbody')[0];
     var rows = tbody.getElementsByTagName('tr');

     var rowArray = new Array();
     for (var i = 0, length = rows.length; i < length; i++)
     {
         rowArray[i] = new Object;
         rowArray[i].oldIndex = i;
         rowArray[i].value = rows[i].getElementsByTagName('td')[sortOn].firstChild.nodeValue;
     }

     if (sortOn == sortedOn)         {
         rowArray.reverse();
     }
     else         {
         sortedOn = sortOn;
         /*
    Decide which function to use from the three:RowCompareNumbers,
    RowCompareDollars or RowCompare (default).
    For first column, I needed numeric comparison.
    */
         if (sortedOn == 0)             {
             rowArray.sort(RowCompareNumbers);
         }
         else             {
             rowArray.sort(RowCompare);
         }
     }

     var newTbody = document.createElement('tbody');
     for (var i = 0, length = rowArray.length; i < length; i++)
     {
         newTbody.appendChild(rows[rowArray[i].oldIndex].cloneNode(true));
     }

     table.replaceChild(newTbody, tbody);
 }

 function RowCompare(a, b)
 {
     var aVal = a.value;
     var bVal = b.value;
     return (aVal == bVal ? 0 : (aVal > bVal ? 1 : -1));
 }

 // Compare number
 function RowCompareNumbers(a, b)
 {
     var aVal = parseInt(a.value);
     var bVal = parseInt(b.value);
     return (aVal - bVal);
 }

 // compare currency
 function RowCompareDollars(a, b)
 {
     var aVal = parseFloat(a.value.substr(1));
     var bVal = parseFloat(b.value.substr(1));
     return (aVal - bVal);
 }
函数排序表(sortOn)
{
var table=document.getElementById('results');
var tbody=table.getElementsByTagName('tbody')[0];
var rows=tbody.getElementsByTagName('tr');
var rowArray=新数组();
for(变量i=0,长度=rows.length;ibVal?1:-1));
}
//比较数字
函数行比较枚举数(a、b)
{
var aVal=parseInt(a.value);
var bVal=parseInt(b.值);
返回(aVal-bVal);
}
//比较货币
函数行比较计算器(a、b)
{
var aVal=parseFloat(a.value.substr(1));
var bVal=parseFloat(b.value.substr(1));
返回(aVal-bVal);
}

看一看。它可以应用于任何格式良好的表(即,has
thead
tbody
元素)。我在这里能想到的唯一问题是确保在ajax调用中加载数据后绑定表分类器。

看看。它可以应用于任何格式良好的表(即,有
thead
tbody
元素。我能想到的唯一一个问题是确保在ajax调用中加载数据后绑定表排序器。

看到这一点。。感谢您的回复。但我不想做ajax排序。。我希望在Javascript中进行完整排序。谢谢您的回复。可以吗您请将回复作为“答案”发布,这样我就可以给您评分了。看这个..谢谢您的回复。但我不想做AJAX排序..我希望完整的排序在JavaScript中进行谢谢您的回复。您能将回复发布为“A”吗