我的aspx页面上有一个基本的转发器,它在后面的代码中使用了viewstate。现在这个工作完全正常,但是由于它创建了巨大的视图状态,我的页面开始加载非常慢,以及非常重量级的Web控件链接按钮。
代码示例:
protected void SortButtonCommand(object sender, CommandEventArgs e) {
var curSort = Convert.ToString(ViewState[SortHelper.SortViewstateFieldKey]);
var curDir = Convert.ToString(ViewState[SortHelper.SortViewstateDirKey]);
var selSort = Convert.ToString(e.CommandArgument);
ViewState[SortHelper.SortViewstateFieldKey] = selSort;
BindRepeater();
}
private void BindRepeater() {
// some code
if(ViewState[SortHelper.SortViewstateFieldKey] != null) {
var curSort = Convert.ToString(ViewState[SortHelper.SortViewstateFieldKey]);
var curDir = Convert.ToString(ViewState[SortHelper.SortVieewstateDirKey]);
switch(curSort) {
case "ID":
if(String.IsNullOrEmpty(curDir) || curDir.Equals(SortHelper.SortDirAsc)) {
data = data.OrderBy(a => a.Id).ToList();
}else {
data = data.OrderByDescending(a => a.Id).ToList();
}
break;
// more sorting based on the curSort value
}
}
}
前端代码:
<cms:BasicRepeater runat="server" ID="rptData" OnItemCommand="RptDataItemCommand" ItemType="WebService call">
<HeaderTemplate>
<table>
<tr>
<th><asp:LinkButton ID="lnkBtnId" runat="server" OnCommand="SortButtonCommand" CommandArgument="ID" Text="ID" /></th>
// more th's
</tr>
</HeaderTemplate>
//// closing tags
所以,现在这一切都有效。但有没有什么方法可以删除viewstate和也许是一个转发器的使用,也许可以使用AJAX填充HTML表并进行排序而不使用webcontrol来减少视图状态,以便我的页面加载更快?如果AJAX是可能的,那么你们能指出我正确的方向来开始这一切吗?
感谢任何帮助!