剃刀页面-使用多个提交按钮或多个表单处理分页

时间:2018-12-14 17:19:11

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

我正在Web应用程序中建立一个相对简单的分页。请注意,这严格使用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数量膨胀。但是想检查这是完全错误的方法还是有其目的。

注意:我之所以不使用定位标记生成分页链接的唯一原因是,我希望用户能够控制返回值的数量。因此,<input type="number" asp-for="PageSize" />的原因(我很可能将其更改为选择列表)。如果可以通过(value="@Userenteredvalueforfield"之类的东西来处理用户输入),我将把所有内容都更改为锚标记。

1 个答案:

答案 0 :(得分:0)

使用asp-route标记帮助器属性Tag Helpers in forms in ASP.NET Core

进行转换