【问题标题】:Issue in Custom Paging with Search Parameters使用搜索参数的自定义分页中的问题
【发布时间】:2012-12-29 09:27:30
【问题描述】:

我有一个只有一个网络表单的web forms 应用程序。作为custom paging 的一部分,我在网格视图下的每个索引页都有hyperlinks。这些超链接 url 位置指向同一页面,所需页面的索引号附加为query string

string url = requestUrl;
int position = requestUrl.IndexOf('?');
if (position > 0)
{
         url = requestUrl.Substring(0, position);
}

string link = "<a  href='" + url + "?Index=[Index]&amp;Size=[Size]'><span class='page-numbers'>##Text##</span></a>";

每次单击特定页面的超链接时,都会从数据库中检索数据。因此,我还需要将搜索参数传递给新索引的页面。我可以将它作为查询字符串传递。但挑战是在某些情况下参数内容长度可能超过查询字符串限制。

当点击超链接时,将搜索参数传递给新页面的最佳方法是什么?

注意:分页的简化示例可以参考custom-paging-in-asp-net-web-application

注意:原则是不要使用超过 2000 个字符的 URL

编辑

根据答案,我使用的是 LinkBut​​tons 而不是 Hypelinks。 LinkButton 可以做一个Postback。另外,我以分页逻辑在User Control 中的方式分离了代码。它不需要任何业务特定数据和搜索参数。这段代码可见https://codereview.stackexchange.com/questions/20510/custom-paging-in-asp-net-web-application

参考文献

  1. What is the maximum length of a URL?
  2. What is the limit on QueryString / GET / URL parameters
  3. Custom paging with ASP.NET GridView

【问题讨论】:

    标签: c# asp.net .net


    【解决方案1】:

    由于您想导航到同一页面并只需传递一些参数 - 而不是使用常规超链接,请使用将处理请求的 LinkButton在服务器端并刷新数据。

    无论你想传递什么参数 - 你都可以放在 hidden fields

    使用此解决方案,您有 no need to use URLs 并且数据被 POST -ed 回服务器(而不是 GET 方法,正如您所提到的,它有其局限性)

    例如,在您的 aspx 页面中:

    <asp:LinkButton runat="server" ID="lbNextPage" onclick="lbNextPage_Click" />
    <asp:HiddenField runat="server" ID="hdnData" />
    

    然后在你的代码后面:

    protected void lbNextPage_Click(object sender, EventArgs e)
    {
            string data = hdnData.Value;
    
            // Refresh data based on data
            GridView1.DataSource = <NEW DATATABLE>;
            GridView1.DataBind();
    }
    

    当然,您可以使用要传递给超链接的任何参数来填充 hdnData。

    【讨论】:

    • 我不知道 LinkBut​​ton 如何解决这个问题。如何获取上一页的隐藏字段值?能详细点吗?
    • 它不是前一页,它是同一页。您正在执行回发到同一页面 - 并传递您想要的任何数据以了解如何更新网格(通过重新查询服务器并执行数据绑定) - 添加了一个示例
    • 感谢 POSTback 方法。但是,我不明白为什么我们需要一个 HiddenField。我们不能直接从文本框值中获取参数吗?
    • @Lijo 由于您没有发布任何相关代码,因此我为您提供了通用解决方案。您可以使用文本框或任何其他控件,其数据在服务器端可用...
    • 谢谢。我已经在codereview.stackexchange.com/questions/20510/… 中发布了代码。你有任何关于它的cmets吗?注意:我已将分页链接分离到用户控件中。
    猜你喜欢
    • 1970-01-01
    • 2017-04-01
    • 1970-01-01
    • 2013-02-16
    • 2012-06-30
    • 1970-01-01
    • 2011-07-13
    • 2011-01-18
    • 2021-10-04
    相关资源
    最近更新 更多