0

我有一个web forms只有一个 Web 表单的应用程序。作为 a 的一部分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. URL 的最大长度是多少?
  2. QueryString / GET / URL 参数的限制是什么
  3. 使用 ASP.NET GridView 自定义分页
4

1 回答 1

1

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

无论你想传递什么参数——你都可以放在隐藏字段中。

使用此解决方案,您拥有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。

于 2013-01-15T10:35:55.837 回答