【问题标题】:Razor Pages - handling pagination with multiple submit buttons or multiple formsRazor Pages - 使用多个提交按钮或多个表单处理分页
【发布时间】:2018-12-14 17:19:11
【问题描述】:

我正在我的网络应用程序中构建一个相对简单的分页。请注意,这是严格使用 asp.net 核心,我将把它重建为 SPA。

我已经实现了分页,但对两件事感到困惑:

  • 多个提交按钮的工作原理
  • 正确的方法(即我应该使用多按钮选项或表单还是完全改变我的方法)

多个提交按钮

 <form method="post">
        <input type="number" asp-for="PageSize" />
        @if (Model.pageParameters?.PreviousPageLink != null)
        {
            <button type="submit" asp-page-handler="" asp-route-pageNum="@(Model.pageParameters.CurrentPage - 1)" class="btn btn-default">Previous</button>
        }
        @for (var i = 1; i <= Model.pageParameters?.TotalPages; i++)
        {
            <button type="submit" asp-route-pageNum="@i" class="btn btn-default">@i</button>
        }
        @if (Model.pageParameters?.NextPageLink != null)
        {
            <button type="submit" asp-route-pageNum="@(Model.pageParameters.CurrentPage + 1)" class="btn btn-default">Next</button>
        }
    </form>

在查看https://docs.microsoft.com/en-us/aspnet/core/razor-pages/?view=aspnetcore-2.2&tabs=visual-studio#write-a-basic-form 的一些分页示例后,我找到了上述方法。多个提交按钮与单独的asp-route-{value} 属性一起使用,而不是多个表单。

我不知道这可以用在按钮上。我认为这更适用于链接标签并确保传递正确的数据。然而,上述方法在转换按钮时有效,如下所示:

<button type="submit" class="btn btn-default" formaction="/MeetingMinutes/1">1</button>

如何使用asp-route-{value} 属性进行转换?我知道默认情况下表单将回发到未指定任何操作的同一页面。 但是如何生成 formaction 属性以使其正常工作?


多种形式方法

它与上面的方法基本相同,但使用了多种形式:

 @for (var i = 1; i <= Model.pageParameters?.TotalPages; i++)
    {
        <form method="post">
            <button type="submit" class="btn btn-default">@i</button>
            <input type="hidden" asp-for="PageNum" value="@i" />
            <input type="number" asp-for="PageSize" />
        </form>
    }

我不太喜欢这种方法,因为它使用多种表单,这可能会导致生成的 HTML 数量膨胀。但想检查这是否是一种完全错误的方法,或者它是否有其目的。

注意:我没有使用锚标签生成分页链接的唯一原因是因为我希望用户能够控制返回值的数量。因此&lt;input type="number" asp-for="PageSize" /&gt; 的原因(我最有可能将其更改为选择列表)。如果可以处理通过(value="@Userenteredvalueforfield" 之类的)获取用户输入,我会将所有内容更改为锚标记。

【问题讨论】:

  • @MuratCanOĞUZHAN 不过,这并没有使用单独的处理程序方法。这一切都被发布到同一个处理程序。我的问题更类似于 asp-route-{value} 如何将按钮元素转换为 formaction 以及我的初始方法(单个表单)是否正确。我很想将所有内容更改为锚标记,但由于无法处理用户输入的限制,我无法使用它。

标签: c# asp.net-core asp.net-core-mvc


【解决方案1】:

使用 asp-route Tag Helper 属性进行转换:Tag Helpers in forms in ASP.NET Core

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-23
    • 2019-08-23
    • 2014-02-16
    • 1970-01-01
    • 2021-08-11
    相关资源
    最近更新 更多