首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在C# ASP.NET中跨站点维护状态

在C# ASP.NET中跨站点维护状态
EN

Stack Overflow用户
提问于 2010-07-12 07:36:13
回答 3查看 520关注 0票数 0

我有一个网站,可以从推特上返回搜索结果,用C# ASP.NET编写。搜索效果非常好。

当用户看到结果时,我希望他们也有一个‘下一页’类型的超链接,将执行搜索从上一个结果向前(使用推特的next_page数据)。

如何保留属性,以便在单击链接时使用不同的参数为下一个结果再次运行搜索?我不能使用表单,因为页面上已经有一个表单,MS限制为每页一个表单(对于runat="server")。

请帮帮忙,这快把我逼疯了。

PS我想包括代码,但不确定要包含哪一位,因为它与ASP.NET的工作方式以及我自己的编码方式有更多的关系。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-07-12 07:48:36

有上百种不同的方法来解决这个问题。ASP.NET基础结构包括一种称为ViewState的东西,它允许页面及其控件跨页面视图持久存储任意数据和对象。

只有一个<form>,但是你可以有无限数量的链接和按钮,它们以不同的方式提交表单-当页面posts back时,每个都可以触发自己的方法。

在您的情况下利用这一点的一种简单方法是将页面参数存储在“下一页”链接上。这是一个非常简单的示例,它假设您只需要知道页码,但它已经达到了目的:

代码语言:javascript
复制
<asp:LinkButton runat="server" ID="next_page" Text="Next Page" OnClick="NextPage_Click" />

..。

代码语言:javascript
复制
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
EN

Stack Overflow用户

发布于 2010-07-12 07:45:46

有两种简单的方法可以做到:

在url中包含一个参数,即下一个超链接的href,则url可能如下所示:

代码语言:javascript
复制
http://mysite.com/myWebPage.aspx?currentPage=1

然后,您可以从代码后台的查询字符串中访问该参数。

您还可以将其保存到会话中:

代码语言:javascript
复制
Session["currentPage"] = 1;

然后,在回发时,您可以检查它:

代码语言:javascript
复制
int currentPage = 0;
if (Session["currentPage"] != null)
    int.TryParse(Session["currentPage"].ToString(), out currentPage);

对于会话,它将根据您的IIS设置自动过期,而使用querystring选项它不会过期(尽管用户可能会弄乱它,因此您必须在使用它之前对其进行验证)。

票数 2
EN

Stack Overflow用户

发布于 2010-07-12 07:45:40

让特性将它们的值保存到视图状态。

如下所示:

代码语言:javascript
复制
public int PageNumber
{  
     get
     {         
          object value == this.ViewState["PageNumber"];
          if(value != null)
          { 
               return (int)value;
          }
          else
          {
               return 1;
          }
     }
     set
     { 
          this.ViewState["PageNumber"] = value;
     }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3225065

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档