我正在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"
之类的东西来处理用户输入),我将把所有内容都更改为锚标记。