0

web formsWebフォームが1つしかないアプリケーションがあります。の一部として、グリッドビューの下に各インデックスページがありますcustom paginghyperlinksこれらのハイパーリンクの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は使用しないでください

編集

答えに基づいて、私はHypelinksの代わりにLinkBut​​tonsを使用しています。 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.NETGridViewを使用したカスタムページング
4

1 に答える 1

1

同じページに移動していくつかのパラメーターを渡すだけなので、通常のハイパーリンクを使用する代わりに、サーバー側で要求を処理してデータを更新するLinkBut​​tonを使用します。

渡したいパラメータは何でも、非表示フィールドに配置できます。

このソリューションを使用するno need to use URLsと、データがPOSTされてサーバーに戻されます(前述のように、制限がある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 に答える