代码之家  ›  专栏  ›  技术社区  ›  Alex

在C ASP.NET中维护整个站点的状态

  •  0
  • Alex  · 技术社区  · 16 年前

    我有一个从Twitter返回搜索结果的网站,用C ASP.NET编写。搜索效果很好。

    当用户看到结果时,我希望他们也有一个“下一页”类型的超链接,从上一个结果开始执行搜索(使用Twitter next_page 数据)。

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

    请帮帮我,这让我发疯了。

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

    3 回复  |  直到 16 年前
        1
  •  2
  •   Rex M    16 年前

    有一百种不同的方法来解决这个问题。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 指向所需页索引的LinkButton属性。链接按钮触发 NextPage_Click 方法,并且ASP.NET的ViewState基础结构允许持久化commandArgument值。

        2
  •  2
  •   slugster Joey Cai    16 年前

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

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

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

    然后,您可以从代码隐藏中的querystring访问该参数。

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

    Session["currentPage"] = 1;
    

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

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

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

        3
  •  1
  •   TheGeekYouNeed    16 年前

    让属性将其值保存到视图状态。

    像这样:

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