2010-07-11 59 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