2008-03-01

ASP.NET Ajax History 上一頁功能失效

有在用ASP.NET Ajax 的朋友一定知道,微軟做了很方便的UpdatePanel,從此只要把做好的GridView拉到UpdatePanel內馬上享用現成的AJAX程式,但是使用Ajax Gridview的缺點也就此產生。呵呵

這應該算是一種困擾吧,假設每頁顯示100筆資料,當你看到第3頁時,突然想看某個項目的細項,當你點進去看到細項頁之後,想說按瀏覽器的上一頁會回到第3頁繼續瀏覽時,很抱歉!保證一定會回到第1頁,屢試不爽^^

有問題就會有改善的動力,微軟在新版的ASP.NET 3.5 Extendsion放入了History功能,雖然早在之前就有獨立的Control可以用,但是那是過去式了,有新的東西就來用新的吧

要先安裝ASP.NET 3.5 Extendsion如果web hosting 有支援.Net 3.5的話,我用的web hosting剛好就有支援

http://www.aspnix.com

開專案時當然也要選ASP.NET 3.5 Extendsion

沒選ExtendsionScriptManager不會出現EnableHistory讓你選

.aspx

<asp:ScriptManager ID="ScriptManager1" runat="server" EnableHistory="true" EnableStateHash="false" />

底下當然還有UpdatePanel和你要顯示的Gridview之類的控件

我試把過ViewState關掉都可以用History的功能

.vb

Private Sub BindRepeater(ByVal index As Int32)

If ScriptManager1.IsInAsyncPostBack And Not ScriptManager1.IsNavigating Then

ScriptManager1.AddHistoryPoint("PageIndex", index, ConfigurationManager.AppSettings("PageTitle").ToString() & "- 全部案件第 " & index & " ")

End If

pager1.CurrentIndex = index

pager1.ItemCount = PostedBLL.GetPostedDataCount("All")

CaseRepeater.DataSource = PostedBLL.GetPostedByCustomPaging(index, pager1.PageSize, "All")

CaseRepeater.DataBind()

CaseUpdatePanel.Update()

End Sub



Protected Sub ScriptManager1_Navigate(ByVal sender As Object, ByVal e As System.Web.UI.HistoryEventArgs) Handles ScriptManager1.Navigate

Dim indexString As String = e.State("PageIndex")

Dim CaseIndex As Integer

If String.IsNullOrEmpty(indexString) Then

CaseIndex = 1

Else

CaseIndex = Convert.ToInt32(indexString)

End If

Page.Title = ConfigurationManager.AppSettings("PageTitle").ToString() & "- 全部案件第 " & CaseIndex & " "

BindRepeater(CaseIndex)

End Sub

0 comments: