在ASP.NET网页Razor v2中发布WebGrid表单

时间:2012-12-10 19:31:47

标签: asp.net-mvc-3 forms razor postback webgrid

好的,典型问题:

  • 我有一张包含7884条记录的表格(现在 - 但会有很多......)
  • 我想通过网络为管理员提供一种快速监控此表的方法。
  • 我还需要为观众提供指定一些过滤以进一步缩小结果范围的能力,以及能够说明从数据库中提取多少条记录的能力。

我正在进行ASP.NET Web开发,因此我选择使用(更直接的)ASP.NET WebPages框架。

我正在使用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>

enter image description here

enter image description here

1 个答案:

答案 0 :(得分:0)

使用jQuery强制表单被POST,并阻止点击链接启动GET请求。本文将详细介绍如何更详细地执行此操作:http://www.mikesdotnetting.com/Article/180/Displaying-Search-Results-In-A-WebGrid