ASP.NET MVC WebGrid上的客户端排序
我有一个包含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);
<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);
}
看一看。它可以应用于任何格式良好的表(即,hasthead
和tbody
元素)。我在这里能想到的唯一问题是确保在ajax调用中加载数据后绑定表分类器。看看。它可以应用于任何格式良好的表(即,有thead
和tbody
元素。我能想到的唯一一个问题是确保在ajax调用中加载数据后绑定表排序器。看到这一点。。感谢您的回复。但我不想做ajax排序。。我希望在Javascript中进行完整排序。谢谢您的回复。可以吗您请将回复作为“答案”发布,这样我就可以给您评分了。看这个..谢谢您的回复。但我不想做AJAX排序..我希望完整的排序在JavaScript中进行谢谢您的回复。您能将回复发布为“A”吗