当我到达下一页时,Umbraco 搜索分页不起作用
Umbraco Search Pagination not working when i got to the next page
我已经尝试在搜索结果中进行分页,代码如下
@inherits Umbraco.Web.Mvc.UmbracoTemplatePage
<form action="/movesearchresult/" method="GET">
<input type="text" class="searchfield" placeholder="" name="query">
<button class="searchbtn btn btn-default btn-sm">Search</button>
</form>
@{
var searchQuery = Request.QueryString["query"];
}
@{
//number of results
var searchResults = Umbraco.Search(searchQuery);
var resultsCount = Umbraco.Search(searchQuery).Count();
//required results per page
var pageSize = 5;
//retrieve current page from query string
int currentPage = 1;
if (!String.IsNullOrEmpty(Request.QueryString["query"]))
{
int.TryParse(Request.QueryString["query"], out currentPage);
}
//number of pages
int pageCount = 1;
if (resultsCount > pageSize)
{
pageCount = (int)Math.Ceiling((double)resultsCount / pageSize);
}
}
<div>
Page @currentPage of @pageCount pages
</div>
<div class="searchresults move-repo">
<ul>
@*Iterate through the search results skipping the results showing on any previous pages, and taking enough results to fill the page*@
@foreach (var result in searchResults.Skip((currentPage - 1) * pageSize).Take(pageSize))
{
<li>
<a href="@result.Url">@result.Name</a>
</li>
}
</ul>
</div>
<ul>
@for (int i = 1; i <= pageCount; i++)
{
<li>
<a href="/movesearchresult?page=@i">Page @i</a>
</li>
}
</ul>
第一次搜索时分页看起来像这样 。
但是当我通过单击分页进入下一页时,出现了错误屏幕
这是 谁能告诉我我错过了什么
我发现代码中有 2 个问题:
以下:
if (!String.IsNullOrEmpty(Request.QueryString["query"]))
{
int.TryParse(Request.QueryString["query"], out currentPage);
}
应该是
if (!String.IsNullOrEmpty(Request.QueryString["page"]))
{
int.TryParse(Request.QueryString["page"], out currentPage);
}
你的 link 到下一页应该包括查询:
@for (int i = 1; i <= pageCount; i++)
{
<li>
<a href="/movesearchresult?page=@i&query=@searchQuery">Page @i</a>
</li>
}
请注意,您将首先过滤 @searchQuery 以避免 xss 攻击
我还可以推荐在umbraco 中实现搜索时使用名为ezsearch 的包,它简单且构建良好
我已经尝试在搜索结果中进行分页,代码如下
@inherits Umbraco.Web.Mvc.UmbracoTemplatePage
<form action="/movesearchresult/" method="GET">
<input type="text" class="searchfield" placeholder="" name="query">
<button class="searchbtn btn btn-default btn-sm">Search</button>
</form>
@{
var searchQuery = Request.QueryString["query"];
}
@{
//number of results
var searchResults = Umbraco.Search(searchQuery);
var resultsCount = Umbraco.Search(searchQuery).Count();
//required results per page
var pageSize = 5;
//retrieve current page from query string
int currentPage = 1;
if (!String.IsNullOrEmpty(Request.QueryString["query"]))
{
int.TryParse(Request.QueryString["query"], out currentPage);
}
//number of pages
int pageCount = 1;
if (resultsCount > pageSize)
{
pageCount = (int)Math.Ceiling((double)resultsCount / pageSize);
}
}
<div>
Page @currentPage of @pageCount pages
</div>
<div class="searchresults move-repo">
<ul>
@*Iterate through the search results skipping the results showing on any previous pages, and taking enough results to fill the page*@
@foreach (var result in searchResults.Skip((currentPage - 1) * pageSize).Take(pageSize))
{
<li>
<a href="@result.Url">@result.Name</a>
</li>
}
</ul>
</div>
<ul>
@for (int i = 1; i <= pageCount; i++)
{
<li>
<a href="/movesearchresult?page=@i">Page @i</a>
</li>
}
</ul>
第一次搜索时分页看起来像这样
但是当我通过单击分页进入下一页时,出现了错误屏幕
这是
我发现代码中有 2 个问题:
以下:
if (!String.IsNullOrEmpty(Request.QueryString["query"]))
{
int.TryParse(Request.QueryString["query"], out currentPage);
}
应该是
if (!String.IsNullOrEmpty(Request.QueryString["page"]))
{
int.TryParse(Request.QueryString["page"], out currentPage);
}
你的 link 到下一页应该包括查询:
@for (int i = 1; i <= pageCount; i++)
{
<li>
<a href="/movesearchresult?page=@i&query=@searchQuery">Page @i</a>
</li>
}
请注意,您将首先过滤 @searchQuery 以避免 xss 攻击
我还可以推荐在umbraco 中实现搜索时使用名为ezsearch 的包,它简单且构建良好