0

OK、典型的な問題:

  • 私は7884のレコードを含むテーブルを持っています(今のところ、しかしたくさんあるでしょう...)
  • 管理者に、Webを介してこのテーブルを監視する簡単な方法を提供したいと思います。
  • また、結果をさらに絞り込むためにフィルタリングを指定する機能と、DBからプルするレコードの数を表示できる機能を視聴者に提供する必要があります。

ASP.NET Web開発の概要を説明しているので、(より単純な)ASP.NETWebPagesフレームワークを使用することにしました。

レコードを表示するためにを使用しSystem.Web.Helpers.WebGridていますが、ページングが自動的に実装されるという事実が気に入っています。

を使用し<form method="post">てフィルタリングパラメータを収集しているので、フォームがポストバックされたときに、これらの値に基づいてクエリを調整できます。また、これらの値をフォームフィールドに割り当てて、ユーザーが使用中の投稿されたパラメーターを確認できるようにします。

WebGridただし、ページフッターに表示されるによって生成されたページリンクは、フォームのクエリフラグメントを含むすべての参照現在のページURLに気づきました?page=n

したがって、明らかに、ページをナビゲートすると、ページフォームデータなしでリクエストを受け取ります...

この単純な問題を解決し、これらのページの開発を当面の間短くするために推奨されるパターンは何ですか?

@{
    Layout = "~/_TablePageLayout.cshtml";
    Page.Title = "Wala-Wala";

    var headlinePattern = Request.Form["headlinePattern"];
    var _headlinePattern = headlinePattern;
    if (string.IsNullOrWhiteSpace(headlinePattern)) {
        _headlinePattern = "%";
        headlinePattern = string.Empty;
    }

    var maxCount = Request.Form["maxCount"];
    int? _maxCount = maxCount.TryConvert<int>();
    if (_maxCount == null || _maxCount < 0) {
        _maxCount = null;
        maxCount = string.Empty;
    }

    var database = Database.Open("Wala-Wala-DB");
    var query = _maxCount == null
        ? @"SELECT * FROM dbo.WalaWala WHERE Headline LIKE @1"
        : @"SELECT TOP(@0) * FROM dbo.WalaWala WHERE Headline LIKE @1";

    var dataSource = database.Query(query, _maxCount, _headlinePattern);

    var grid = new WebGrid(source: dataSource, rowsPerPage: 25, canPage: true);
    grid.SortColumn = "Id";
    grid.SortDirection = SortDirection.Descending;

    var rowStart = grid.PageIndex * @grid.RowsPerPage + 1;
    var rowEnd = grid.PageIndex * @grid.RowsPerPage + grid.Rows.Count;
}

<h1>@Page.Title</h1>

<form method="post">
<fieldset>
    <legend>Search</legend>
    <ol>
        <li>
            <label for="maxCount">Maximum:</label>
            <input type="text" id="maxCount" name="maxCount" value="@maxCount""/>
        </li>
        <li>
            <label for="headlinePattern">Headline Pattern:</label>
            <input type="text" id="headlinePattern" name="headlinePattern" value="@headlinePattern""/>
            <input type="submit" value="Search" />
        </li>
    </ol>
</fieldset>
</form>

<p>
    <b>@grid.TotalRowCount entries found. Showing results @rowStart to @rowEnd (page @(grid.PageIndex + 1)
        of @grid.PageCount).</b>
</p>

<div>
    @grid.GetHtml(
        tableStyle: "tableStyle",
        alternatingRowStyle: "alternatingRowStyle",
        mode: WebGridPagerModes.All,
        columns: new[] {
            grid.Column(columnName: "Id", style: "columnStyle"),
            grid.Column(columnName: "Headline", style: "columnStyle"),
            grid.Column(columnName: "DTS", style: "columnStyle"),
        }
    )
</div>

ここに画像の説明を入力してください

ここに画像の説明を入力してください

4

1 に答える 1

0

jQueryを使用して、フォームを強制的にPOSTし、リンクをクリックしてGETリクエストを開始しないようにします。この記事では、これを行う方法について詳しく説明しています:http: //www.mikesdotnetting.com/Article/180/Displaying-Search-Results-In-A-WebGrid

于 2012-12-17T11:19:38.080 に答える