我有一个网站,可以从Twitter返回搜索结果,用C#ASP.NET编写。搜索效果非常好。
当用户看到结果时,我希望他们也有一个“下一页”类型的超链接,它将从上一个结果开始执行搜索(使用Twitter的next_page
数据)。
如何保留属性,以便在单击链接时,它将使用不同的参数再次运行搜索以获得下一个结果?我不能使用表单,因为页面上已有一个表单,MS限制为每页一个表单(runat="server"
)。
请帮忙,这让我疯了。
PS我想过要包含代码,但不确定要包含哪些内容,因为它更多地与ASP.NET的工作方式有关,就像我自己的编码一样。
答案 0 :(得分:2)
有两种简单的方法可以做到:
在url中包含一个参数,该参数是Next超链接的href,url可能如下所示:
http://mysite.com/myWebPage.aspx?currentPage=1
然后,您可以从后面代码中的查询字符串中访问该参数。
您也可以将其保存到会话:
Session["currentPage"] = 1;
然后在回发后你可以检查它:
int currentPage = 0;
if (Session["currentPage"] != null)
int.TryParse(Session["currentPage"].ToString(), out currentPage);
使用Session会根据您的IIS设置自动过期,而使用querystring选项则不会过期(尽管用户可以使用它,因此您必须在使用之前对其进行验证)。
答案 1 :(得分: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);
}
在这个例子中,我们将LinkButton的CommandArgument
属性设置为我们想要的页面索引。 LinkButton触发要调用的NextPage_Click
方法,ASP.NET的ViewState基础结构允许持久保存CommandArgument值。
答案 2 :(得分:1)
让您的属性将其值保存到视图状态。
这样的事情:
public int PageNumber
{
get
{
object value == this.ViewState["PageNumber"];
if(value != null)
{
return (int)value;
}
else
{
return 1;
}
}
set
{
this.ViewState["PageNumber"] = value;
}
}