【问题标题】:ASP.NET Core Razor Pages multiselect input and paginationASP.NET Core Razor Pages 多选输入和分页
【发布时间】:2019-06-13 04:21:40
【问题描述】:

我正在关注 ASP.NET Core Razor Pages 的 Microsoft 官方教程,并且正在调整位于 here 的分页部分以适用于我的网站。

public async Task OnGetAsync(string sortOrder,
    string currentFilter, string searchString, int? pageIndex)
{
    CurrentSort = sortOrder;
    NameSort = String.IsNullOrEmpty(sortOrder) ? "name_desc" : "";
    DateSort = sortOrder == "Date" ? "date_desc" : "Date";
    if (searchString != null)
    {
        pageIndex = 1;
    }
    else
    {
        searchString = currentFilter;
    }

    CurrentFilter = searchString;

    IQueryable<Student> studentIQ = from s in _context.Student
                                    select s;
    if (!String.IsNullOrEmpty(searchString))
    {
        studentIQ = studentIQ.Where(s => s.LastName.Contains(searchString)
                               || s.FirstMidName.Contains(searchString));
    }
    switch (sortOrder)
    {
        case "name_desc":
            studentIQ = studentIQ.OrderByDescending(s => s.LastName);
            break;
        case "Date":
            studentIQ = studentIQ.OrderBy(s => s.EnrollmentDate);
            break;
        case "date_desc":
            studentIQ = studentIQ.OrderByDescending(s => s.EnrollmentDate);
            break;
        default:
            studentIQ = studentIQ.OrderBy(s => s.LastName);
            break;
    }

    int pageSize = 3;
    Student = await PaginatedList<Student>.CreateAsync(
        studentIQ.AsNoTracking(), pageIndex ?? 1, pageSize);
}

对于我的网站,SearchString 的等价物是一个多选选择框。这作为字符串数组传递到页面。我找不到任何有关如何将其格式化为适用于普通字符串的链接的 cshtml 部分的文档。

基本上我需要让下面的 asp-route-currentFilter 为字符串数组工作。

<a asp-page="./Index"
   asp-route-sortOrder="@Model.CurrentSort"
   asp-route-pageIndex="@(Model.Student.PageIndex - 1)"
   asp-route-currentFilter="@Model.CurrentFilter"
   class="btn btn-default @prevDisabled">
    Previous
</a>
<a asp-page="./Index"
   asp-route-sortOrder="@Model.CurrentSort"
   asp-route-pageIndex="@(Model.Student.PageIndex + 1)"
   asp-route-currentFilter="@Model.CurrentFilter"
   class="btn btn-default @nextDisabled">
    Next
</a>

我应该改变什么来做到这一点?

【问题讨论】:

  • 你的意思是要多条件过滤吧?
  • 我想使用具有“multiple”属性的选择框进行过滤。这在 URL 中显示为 localhost:44386/MyPage?SearchString=foo&SearchString=bar,但作为字符串数组进入我的 C#。
  • 试试这个:var result = from p in studentIQ where searchString.Any(val => p.LastName.Contains(val)) select p;
  • 我知道该怎么做,这是我正在努力处理的下一页和上一页链接。
  • @AndyL 你有没有想过这个问题?我有同样的问题。

标签: c# razor asp.net-core razor-pages


【解决方案1】:

asp-route-CurrentFilter 无法分配数组。您可以使用@Url.Page 分配自定义路线数据。请参阅here

public string[] CurrentFilter { get; set; }
public async Task OnGetAsync(string sortOrder,string[] currentFilter,string[] searchString,int? pageIndex)

.cshtml:

<a href="@Url.Page("./Index", 
                    new {
                         sortOrder= Model.CurrentSort,
                         currentFilter = Model.CurrentFilter, 
                         pageIndex= Model.Student.PageIndex +1
                    })"
                    class="btn btn-default @nextDisabled">
Next</a>

【讨论】:

    猜你喜欢
    • 2018-04-05
    • 2018-10-29
    • 2020-11-21
    • 2018-03-30
    • 2019-03-17
    • 2018-10-16
    • 2019-07-25
    • 2018-06-07
    • 1970-01-01
    相关资源
    最近更新 更多