如何使用剃须刀在Umbraco网站中实现分页搜索
How to implement paging search in Umbraco site using razor
我正在Umbraco中使用剃须刀实现搜索。我正在尝试对搜索结果进行分页——我使用了MVCPagedList
,但它不起作用。我也尝试过一些javascript代码,但这也不起作用。
我的代码:
@using Examine.LuceneEngine.SearchCriteria
@inherits Umbraco.Web.Macros.PartialViewMacroPage
@using PagedList
@using PagedList.Mvc;
@{
int? page = 10;
//PerformSearch performSearch = new PerformSearch();
var pageNumber = page ?? 1;
var searchTerm = Request.QueryString["s"];
if (String.IsNullOrWhiteSpace(searchTerm))
{
searchTerm = "";
}
var searcher = ExamineManager.Instance.SearchProviderCollection["ExternalSearcher"];
var searchCriteria = searcher.CreateSearchCriteria(UmbracoExamine.IndexTypes.Content);
Examine.SearchCriteria.IBooleanOperation filter = null;
var searchKeywords = searchTerm.Split(' ');
int i = 0;
for (i = 0; i < searchKeywords.Length; i++)
{
if (filter == null)
{
filter = searchCriteria.GroupedOr(new string[] { "nodeName", "bodyText", "browserTitle", "tags", "mediaTags" }, searchKeywords[i]);
}
else
{
filter = filter.Or().GroupedOr(new string[] { "nodeName", "bodyText", "browserTitle", "tags", "mediaTags" }, searchKeywords[i]);
}
}
var searchResults = searcher.Search(searchCriteria).Where(r => r["__IndexType"] == "content").ToList();
//performSearch.searcher = searchResults.ToString();
var paging = searchResults.ToPagedList(pageNumber,1);
if (searchResults.Any())
{
<ul>
@foreach (var result in searchResults)
{
var node = Umbraco.TypedContent(result.Id);
var pathIds = result["__Path"].Split(',');
var path = Umbraco.TypedContent(pathIds).Where(p => p != null).Select(p=> new {p.Name}).ToList();
<li style="line-height: 15px; list-style: none;">
<section>
<a href="@node.Url">
<p class="search-heading custom ">@node.Name</p>
<p class="search-link">www.addingvalue.webdevstaging.co.uk<strong>@node.Url</strong></p>
</a>
@if (result.Fields.ContainsKey("title"))
{
<p class="results-title"><strong>@result["title"]</strong></p>
}
@if (result.Fields.ContainsKey("bodyText"))
{
<p>@result["bodyText"].Truncate(250)</p>
}
</section>
</li>
}
</ul>
}
else
{
<p>
There are no results matching your search criteria:
@if (!String.IsNullOrWhiteSpace(searchTerm))
{
<text>'@searchTerm'</text>
}
</p>
}
Html.PagedListPager((IPagedList)paging, paged => Url.Action("List", new { page }));
}
创建分页列表的一种方法,使用searchResults
作为搜索结果列表:
@{
//number of results
var resultsCount = searchResults.Count();
//required results per page
var pageSize = 5;
//retrieve current page from query string
int currentPage = 1;
if (!String.IsNullOrEmpty(Request.QueryString["page"]))
{
int.TryParse(Request.QueryString["page"], 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>
<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>
<ul>
@for (int i = 1; i <= pageCount; i++)
{
<li>
<a href="/search-results?page=@i">Page @i</a>
</li>
}
</ul>
相关文章:
- 如何使用skip参数使用angular ui引导进行服务器端分页
- 如何通过引用var Using DataTables来进行分页或排序
- 使用CSS或JavaScript计算分页符的数量
- DataTables-创建自定义分页样式(加载更多样式)
- 在 mongodb 中实现分页
- 提交多个表单并实现分页
- 如何在挖空的“with”绑定中实现分页
- 使用 AngularJS 实现服务器端分页
- jqGrid使用JsonString JsonReader实现服务器端排序分页过滤
- 如何使用剃须刀在Umbraco网站中实现分页搜索
- 如何实现angularJS分页
- 如何在谷歌浏览器的HTML表格中实现分页符
- 在表分类器上实现基本的服务器分页
- 在数据表上实现服务器端分页
- 在AngularJS中使用UIBootstrap实现一个动态分页
- 如何实现带有分页的目录
- 无限滚动分页javascript实现问题
- 使用流星分页实现分页错误
- 如何使用angular ui引导程序在angular js中实现服务器端分页
- 我怎样才能实现这个twbs分页