2010-07-11 29 views
0

我有一個網站,返回用C#ASP.NET編寫的Twitter搜索結果。搜索很有效。在C#ASP.NET中跨站點維護狀態

當用戶看到結果時,我希望他們也有一個'Next Page'類型的超鏈接,它將執行從前一個結果開始的搜索(使用Twitter的next_page數據)。

如何保存屬性,以便單擊鏈接時將使用不同參數再次運行搜索以查找下一個結果?我無法使用表單,因爲頁面上已經有一個表單,MS每頁限制爲一個表單(對於runat="server")。

請幫忙,這是讓我瘋狂。

PS我想過包含代碼,但不知道應該包含哪些內容,因爲它與ASP.NET的工作方式和我自己的代碼的工作方式有關。

回答

2

有一百種不同的方式來解決這個問題。 ASP.NET基礎結構包含一個名爲ViewState的東西,它允許頁面及其控件在頁面瀏覽中保留任意數據和對象。

有一個<form>,但您可以有不限數量的鏈接和按鈕,以不同的方式提交表單 - 當頁面爲posts back時,每個人都可以觸發自己的方法。

在您的情況下利用這種簡單的方法是將頁面參數存儲在「下一頁」鏈接上。這是一個非常簡單的例子,假設你只需要知道頁碼,但它得到了關鍵:

<asp:LinkButton runat="server" ID="next_page" Text="Next Page" OnClick="NextPage_Click" /> 

...

void Page_Load(object sender, EventArgs e) 
{ 
    if(!IsPostBack) 
    { 
     LoadData(0); 
    } 
} 

void LoadData(int page) 
{ 
    //pull page of data from twitter & show on page 
    next_page.CommandArgument = (page+1).ToString(); 
} 

void NextPage_Click(object sender, EventArgs e) 
{ 
    int page = int.Parse(((LinkButton)sender).CommandArgument); 
    LoadData(page); 
} 

在這個例子中,我們設置的CommandArgument財產LinkBut​​ton轉到我們想要的頁面索引。 LinkBut​​ton觸發調用NextPage_Click的方法和ASP。NET的ViewState基礎結構允許CommandArgument值持久化。

+0

賓果 - 正是我期待的信息,非常感謝! – Alex 2010-07-11 23:58:49

+0

PS from Alex 2010-07-12 00:04:24

+0

對,但viewstate是邪惡的。 – 2010-07-15 19:11:33

1

讓您的屬性將其值保存到視圖狀態。

事情是這樣的:

public int PageNumber 
{ 
    get 
    {   
      object value == this.ViewState["PageNumber"]; 
      if(value != null) 
      { 
       return (int)value; 
      } 
      else 
      { 
       return 1; 
      } 
    } 
    set 
    { 
      this.ViewState["PageNumber"] = value; 
    } 
} 
2

有兩種簡單的方法來做到這一點:

包括在是下一個超鏈接的href的URL參數,該URL可能看起來像這樣:

http://mysite.com/myWebPage.aspx?currentPage=1 

然後,您可以從代碼後面的查詢字符串中訪問該參數。

你也可以將它保存到會話:

Session["currentPage"] = 1; 

然後在回發,你可以檢查它:它會自動失效取決於你的IIS安裝會話

int currentPage = 0; 
if (Session["currentPage"] != null) 
    int.TryParse(Session["currentPage"].ToString(), out currentPage); 

,而使用查詢字符串選項它不會過期(雖然用戶可以混淆它,所以你必須在使用它之前驗證它)。

+0

我試圖使用URL ?currentPage = 1但是當我點擊它時,它會抱怨EventValidation,或者它只是將我返回到開始頁面!甚至當我想出如何在我的超鏈接中包含VIEWSTATE時。 – Alex 2010-07-11 23:50:35

+0

話雖如此,Session []很可能是我的解決方案。 – Alex 2010-07-11 23:51:23