好的,典型问题:
- 我有一张包含 7884 条记录的表(现在——但会有很多……)
- 我想为管理员提供一种通过网络快速监控此表的方法。
- 我还需要让查看者能够指定一些过滤以进一步缩小结果范围,并且能够说明要从数据库中提取多少记录。
我正在介绍 ASP.NET Web 开发,因此我选择使用(更直接的)ASP.NET WebPages 框架。
我使用System.Web.Helpers.WebGrid
来显示记录,我喜欢它自动实现分页的事实。
我正在使用 a<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>