2013-01-15 35 views
0

我有一個web forms應用程序只有一個Web窗體。作爲custom paging的一部分,我在網格視圖下爲每個索引頁面提供了hyperlinks。這些超鏈接的網址位置在query string附加的所需頁面的索引號相同的頁面上。使用搜索參數的自定義分頁中的問題

string url = requestUrl; 
int position = requestUrl.IndexOf('?'); 
if (position > 0) 
{ 
     url = requestUrl.Substring(0, position); 
} 

string link = "<a href='" + url + "?Index=[Index]&amp;Size=[Size]'><span class='page-numbers'>##Text##</span></a>"; 

每次點擊某個特定頁面的超鏈接時,都會從數據庫中檢索數據。因此我需要將搜索參數傳遞到新索引的頁面。我可以將它作爲查詢字符串傳遞。但挑戰在於,在某些情況下,參數內容長度可能會超出查詢字符串限制。

單擊超鏈接時,將搜索參數傳遞到新頁面的最佳方法是什麼?

注:尋呼的簡化的例子可以在custom-paging-in-asp-net-web-application

注被稱爲:規則的拇指是不使用的URL長於2000個字符

EDIT

基於該答案,我正在使用LinkBut​​tons而不是Hypelinks。 LinkButton可以做一個Postback。此外,我已將代碼分隔成分頁邏輯位於User Control。它不需要任何業務特定的數據和搜索參數。這段代碼可以看出,在https://codereview.stackexchange.com/questions/20510/custom-paging-in-asp-net-web-application

參考

  1. What is the maximum length of a URL?
  2. What is the limit on QueryString/GET/URL parameters
  3. Custom paging with ASP.NET GridView

回答

1

既然要導航到同一頁,只是通過幾個參數 - 而不是使用常規超鏈接,請使用LinkButton它將在服務器端處理請求並刷新數據。

無論您想要通過什麼參數 - 您可以在hidden fields

有了這個解決方案,您有no need to use URLs和數據POST -ed回服務器(而不是GET方法,正如你提到的,有它的侷限性)

例如,在你的aspx頁:

<asp:LinkButton runat="server" ID="lbNextPage" onclick="lbNextPage_Click" /> 
<asp:HiddenField runat="server" ID="hdnData" /> 

然後在後面的代碼:

protected void lbNextPage_Click(object sender, EventArgs e) 
{ 
     string data = hdnData.Value; 

     // Refresh data based on data 
     GridView1.DataSource = <NEW DATATABLE>; 
     GridView1.DataBind(); 
} 

當然,你可以用你希望傳遞給你的超鏈接的任何參數填充hdnData。

+0

我沒有得到如何LinkBut​​ton可以解決這個問題。我如何獲得上一頁的隱藏字段值?你能否詳細說明一下? – Lijo

+1

這不是上一頁,它是*相同的頁面*。你正在執行一個回發回你的同一頁面 - 並傳遞你想要的任何數據,以便知道如何更新網格(通過重新查詢服務器和執行數據綁定) - 添加示例 – Blachshma

+0

感謝回發方法。但是,我不明白爲什麼我們需要一個HiddenField。我們不能直接從文本框中獲取參數嗎? – Lijo