首页 > 解决方案 > 当结果为空时,Asp.Net Core MVC ajax 部分视图渲染不为空表

问题描述

我有一个带有部分视图“_PartialList”的页面。代码:

<div class="col-md-8 col-sm-12">
        <div class="card" id="listHeader">
            <div class="card-header">
                <h5 class="card-title">Seznam kontaktov</h5>
                <label id="lbTest">test</label>
                <div class="row">
                    <div class="col-12 form-inline">
                        <select id="ddlSelect" asp-items="Model.Stranke" onchange="filterData();" class="form-control"></select>

                        <input type="text" name="SearchString" placeholder="Išči" value="@ViewData[" CurrentFilter"]" id="tbSearch" class="form-control" />

                        <input value="Išči" type="button" id="btnSearch" class="btn btn-primary ml-2" onclick="filterData();" />

                        <div class="text-right">
                            <a asp-controller="Kontakti" asp-action="Add" class="btn btn-primary" role="button">Dodaj</a>
                        </div>

                    </div>
                </div>
            </div>

            <div id="sectionList">
                @{await Html.RenderPartialAsync("_PartialList", Model);}
            </div>

        </div>
    </div>

在部分视图中,我有一个表格,其中显示了我从控制器返回的所有记录。用户可以通过@ddlSelect 和@tbSearch 过滤数据。为此,我使用以下 jquery:

function filterData() {

            var sender = $(this).attr('id');

            // drop down
            var strSelected = "";
            $('#ddlSelect option:selected').each(function () {
                strSelected += $('#ddlSelect')[0].value;
            });

            // search text
            var search = $('#tbSearch').val();

            // url 
            var url = '/Kontakti/IndexPartial?idSelect=' + strSelected;
            url += '&searchString=' + search;

            // partial reload
            $('#sectionList').load(url);

            return false;
        }

当控制器返回结果时,这很有效 - 表得到刷新。

但是,当用户使用不产生任何结果的字符串(空列表)输入搜索时,表不会刷新/清除,但仍会显示最后(成功)查询的行。

从控制器返回空列表时如何显示空表(无行)?

标签: jqueryasp.net-core

解决方案


显然问题出在我从这个 MS 指南中使用的 PaginatedList 中: https ://docs.microsoft.com/en-us/aspnet/core/data/ef-mvc/sort-filter-page?view=aspnetcore-2.0

当数据源为空结果集时,它的 CreateAsync 方法返回错误。

因此,在将模型发送到我的视图之前,我只是在控制器中添加了一个检查,如下所示:

if(result.Count() == 0)
            {
                model.Kontakti = new PaginatedList<KontaktiDetailModel>(result.ToList(), 0, 0, pageSize);
            }
            else
            {
                model.Kontakti = await PaginatedList<KontaktiDetailModel>.CreateAsync(result.AsNoTracking(), pageNumber ?? 1, pageSize);
            }

现在,当没有与用户搜索匹配的结果时,我得到一个空表。


推荐阅读