javascript - Umbraco网站如何使用razor实现分页搜索

标签 javascript jquery asp.net-mvc razor umbraco7

我正在 Umbraco 中使用 razor 实现搜索。我正在尝试对搜索结果实现分页 - 我使用了 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>

关于javascript - Umbraco网站如何使用razor实现分页搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26489314/

相关文章:

javascript - 将方法应用于javascript中的对象和私有(private)变量

javascript - 在 Ajax 请求开始和完成时显示和隐藏元素(状态栏)

javascript - 改进图像 slider 动画

javascript - 将 Date 对象从 javascript 传递到 asp.net mvc Controller

c# - 如何在 View 中设置通用模型?

javascript - 基于Angular JS部分 View 动态更改标题

javascript - 如何使用 lodash拒绝来拒绝同一 key 的多个可能属性?

javascript - 使用数据表jquery在codeigniter中"Undefined table data"

javascript - 当鼠标离开浏览器页面时创建弹出窗口

asp.net-mvc - 具有 3 层架构、 Entity Framework 和依赖注入(inject)的 MVC