Я новичок в asp. net ядре и пытаюсь использовать управление пейджером LazZiya.TagHelpers
в ASP. net ядре 3.1 Проект Razor Page для подкачки страниц для отображения новых элементов, по некоторым причинам показывает все новости (всего 20) на странице новостей, но пейджер, кажется, показывает правильные числа
Кажется, этот пейджинговый элемент управления работает только с EF, а не с Dapper, я пытался заставить его работать с dapper, который не Работа?. Ниже приведен код, связанный с Dapper, а также рабочий код с использованием EF. Я был бы признателен, если бы я мог заставить его работать также с Dapper (что, кажется, невозможно с моими ограниченными знаниями)
Для целей тестирования я установил размер страницы до 3, поэтому на странице должно отображаться 3 элемента, а не все 20 элементов на странице,
Кажется, что управление пейджером не является обязательным для List eNewsList= await NewsService.GetNews(1);
public class NewsModel : PageModel
{
public IEnumerable<News> NewsList { get; set; }
public INewsService NewsService { get; }
public NewsModel(INewsService newsService)
{
NewsService = newsService ?? throw new ArgumentNullException(nameof(newsService));
}
[BindProperty]
public IEnumerable<News> eNewsList { get; set; }
[BindProperty]
public int TotalRecords { get; set; }
[BindProperty]
public int PageNo { get; set; }
[BindProperty]
public int PageSize { get; set; }
// public
public async Task OnGet( int p=1, int s=3)
{
eNewsList = await NewsService.GetNews(1);
TotalRecords = eNewsList.Count();
eNewsList.Skip((p - 1) * s).Take(s);
PageNo = p;
PageSize = s;
//NewsList.ToList();
}
}
Код
<div class="container">
<div class="row">
@foreach (var item in Model.eNewsList)
{
<div class="col-xl-4 col-lg-4 col-md-6">
<div class="card">
<img src="images/NewsImages/@item.NewsImage" class="card-img-top" alt="...">
<div class="card-body">
<h5 class="card-title">@item.NewsHeading</h5>
@if (item.NewsBrief.Length > 50)
{
<p class="card-text">@item.NewsBrief.Substring(0, 50)...</p>}
else
{
<p class="card-text">@item.NewsBrief</p>
}
<a href="/news/@item.NewsID/@item.NewsHeading.Replace(" ", "-").ToLower()" class="btn btn-primary">Read More</a>
</div>
</div>
</div>
}
<div class="row">
<div class="col-12">
<paging total-records="Model.TotalRecords"
page-no="Model.PageNo"
page-size="Model.PageSize">
</paging>
</div>
</div>
</div>
</div>
Код Dapper
// Get all News
public async Task<List<News>> GetNews(int langID)
{
IEnumerable<News> newslist;
using (var conn = new SqlConnection(_configuration.Value))
{
string query = "select * from dbo.News Where LanguageID ="+ langID;
query = query +" AND NewsActive =1 AND NewsVisible=1 order by NewsDate Desc";
conn.Open();
try
{
newslist = await conn.QueryAsync<News>(query, commandType: CommandType.Text);
}
catch (Exception ex)
{
throw ex;
}
finally
{
conn.Close();
}
}
return newslist.ToList();
}
Я не уверен, как связать eNewslist данных с пейджером
I Я использую управление пейджером от http://www.ziyad.info/en/articles/21-Paging_TagHelper_ASP_NET_Core
При использовании EF
рабочий код работает с использованием EF * 1039. *
Код позади
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.RazorPages;
using BookListRazor.Data;
using BookListRazor.Model;
using Microsoft.EntityFrameworkCore;
namespace BookListRazor.Pages
{
public class NewsModel : PageModel
{
// for EF
private readonly ApplicationDbContext _db;
public IEnumerable<News> NewsList { get; set; }
public INewsService NewsService { get; }
//constructor
public NewsModel(INewsService newsService, ApplicationDbContext db)
{
//for EF
_db = db;
//For Dapper
NewsService = newsService ?? throw new ArgumentNullException(nameof(newsService));
}
[BindProperty]
public IEnumerable<News> eNewsList { get; set; }
[BindProperty]
public int TotalRecords { get; set; }
[BindProperty(SupportsGet = true)]
public int P { get; set; }
[BindProperty(SupportsGet = true)]
public int S { get; set; }
// public
public async Task OnGet()
{
//code block for pager to work with EF only
//pager doesnt work with dapper
P = 1;
S = 3;
//var pageQS=1;
if (!String.IsNullOrEmpty(HttpContext.Request.Query["p"]))
{
P = int.Parse(HttpContext.Request.Query["p"]);
}
var query = await _db.News.OrderByDescending(x => x.NewsDate).Where(x => x.LanguageID == 1 && x.NewsActive==true && x.NewsVisible==true).ToListAsync();
TotalRecords = query.Count();
//steps for paging
eNewsList = await _db.News.OrderByDescending(x=>x.NewsDate).Where(x =>x.LanguageID==1).Skip((P - 1) * S).Take(S).ToListAsync();
// Dapper without pagging
// NewsList = await NewsService.GetNews(1);
}
}
}