我有一个网站,可以从推特上返回搜索结果,用C# ASP.NET编写。搜索效果非常好。
当用户看到结果时,我希望他们也有一个‘下一页’类型的超链接,将执行搜索从上一个结果向前(使用推特的next_page数据)。
如何保留属性,以便在单击链接时使用不同的参数为下一个结果再次运行搜索?我不能使用表单,因为页面上已经有一个表单,MS限制为每页一个表单(对于runat="server")。
请帮帮忙,这快把我逼疯了。
PS我想包括代码,但不确定要包含哪一位,因为它与ASP.NET的工作方式以及我自己的编码方式有更多的关系。
发布于 2010-07-12 07:48:36
有上百种不同的方法来解决这个问题。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值。
发布于 2010-07-12 07:45:46
有两种简单的方法可以做到:
在url中包含一个参数,即下一个超链接的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);对于会话,它将根据您的IIS设置自动过期,而使用querystring选项它不会过期(尽管用户可能会弄乱它,因此您必须在使用它之前对其进行验证)。
发布于 2010-07-12 07:45:40
让特性将它们的值保存到视图状态。
如下所示:
public int PageNumber
{
get
{
object value == this.ViewState["PageNumber"];
if(value != null)
{
return (int)value;
}
else
{
return 1;
}
}
set
{
this.ViewState["PageNumber"] = value;
}
}https://stackoverflow.com/questions/3225065
复制相似问题