【问题标题】:Umbraco Search Pagination not working when i got to the next page当我进入下一页时,Umbraco 搜索分页不起作用
【发布时间】:2018-10-02 03:51:19
【问题描述】:

我已经尝试在搜索结果中进行分页,代码在下面

    @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>

第一次搜索时的分页是这样的。

但是当我通过单击分页进入下一页时,我得到了错误屏幕 这是 谁能告诉我我错过了什么

【问题讨论】:

    标签: javascript jquery .net razor umbraco


    【解决方案1】:

    我在代码中看到 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);
        }
    

    并且您指向下一页的链接应包含查询:

    @for (int i = 1; i <= pageCount; i++)
    {
        <li>
            <a href="/movesearchresult?page=@i&query=@searchQuery">Page @i</a>
        </li>
    }
    

    请注意,您将首先过滤 @searchQuery 以避免 xss 攻击

    我还可以推荐在 umbraco 中实现搜索时使用名为 ezsearch 的包,它简单且构建良好

    【讨论】:

    • 您能否告诉我如何获取结果中的内容,因为我只能获得 @result.Name ,我如何获得该搜索的内容
    • 嗨,但是在我实施了您的建议后,我的主屏幕变成了死黄屏,在主屏幕上抛出错误 var searchResults = Umbraco.Search(searchQuery);对象引用未设置为对象的实例。
    • 嗨,我已经解决了 :) 谢谢你的回答,请你帮忙看看如何获​​取内容
    • 可能最简单的方法是使用Umbraco.TypedContent(result.Id) 来获取IPublishedContent 对象,从那里您可以使用GetPropertyValue 阅读内容
    猜你喜欢
    • 2019-03-21
    • 1970-01-01
    • 2015-09-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多