Я создал приложение .NET Core с WebAPI и KendoUI.Я добавил общий репозиторий, когда я пытаюсь добавить источник данных в свою сетку кендо, я получаю сообщение об ошибке .ToDataSourceResult()
:
> делаетне содержат определения для «ToDataSourceResult» и лучшей перегрузки метода расширения «QueryableExtensions.ToDataSourceResult (DataTable, DataSourceRequest)» требует приемник типа «DataTable»
Я следовал документации Kendo для Core и WebApiчтобы завершить этот метод, но я не могу заставить его работать.Я приложил код из моего проекта, связанный с этой ошибкой и данными.
Контроллеры / HomeController
using Kendo.Mvc.Extensions;
using Kendo.Mvc.UI;
using Microsoft.AspNetCore.Mvc;
using Senua.Interfaces;
using Senua.Models;
using System.Diagnostics;
namespace Senua.Controllers
{
public class HomeController : Controller
{
private IVesselRepository service;
public IActionResult Index()
{
return View();
}
[HttpGet]
public DataSourceResult GetVessels([DataSourceRequest]DataSourceRequest request)
{
return service.GetAllVesselsAsync().ToDataSourceResult(request); <----Error appears here.
}
[ResponseCache(Duration = 0, Location = ResponseCacheLocation.None, NoStore = true)]
public IActionResult Error()
{
return View(new ErrorViewModel { RequestId = Activity.Current?.Id ?? HttpContext.TraceIdentifier });
}
}
}
Просмотры / Home / Index
@(Html.Kendo().Grid<Senua.Models.Vessel>()
.Name("vessel_grid")
.Columns(columns =>
{
columns.Bound(p => p.Name);
})
.Pageable()
.Filterable()
.DataSource(dataSource =>
dataSource
.WebApi()
.Events(events => events.Error("error_handler"))
.Model(model =>
{
model.Id(p => p.Id);
})
.Read(read => read.Action("GetVessels", "Home"))
))
<script>
function error_handler(e) {
var errors = $.parseJSON(e.xhr.responseText);
if (errors) {
alert("Errors:\n" + errors.join("\n"));
}
}
</script>
DAL / VesselRepository
using Senua.Interfaces;
using Senua.Models;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace Senua.DAL
{
public class VesselRepository : Repository<Vessel>, IVesselRepository
{
public VesselRepository(LocalContext repositoryContext)
: base(repositoryContext)
{
}
public async Task<IEnumerable<Vessel>> GetAllVesselsAsync()
{
var vessel = await FindAllAsync();
return vessel.OrderBy(x => x.Name);
}
}
Интерфейсы / IVesselRepository
using Senua.Models;
using System.Collections.Generic;
using System.Threading.Tasks;
namespace Senua.Interfaces
{
public interface IVesselRepository
{
Task<IEnumerable<Vessel>> GetAllVesselsAsync();
Task<Vessel> GetVesselByIdAsync(int Id);
Task CreateVesselAsync(Vessel vessel);
Task UpdateVesselAsync(Vessel vessel);
Task DeleteVesselAsync(Vessel vessel);
}
}
DAL/ Репозиторий
using Senua.Interfaces;
using System;
using System.Collections.Generic;
using Microsoft.EntityFrameworkCore;
using System.Linq;
using System.Linq.Expressions;
using System.Threading.Tasks;
namespace Senua.DAL
{
public abstract class Repository<T> : IRepository<T> where T : class
{
protected LocalContext DbContext { get; set; }
public Repository(LocalContext _context)
{
this.DbContext = _context;
}
public async Task<IEnumerable<T>> FindAllAsync()
{
return await this.DbContext.Set<T>().ToListAsync();
}
}
}
Интерфейсы / IRepository
using System;
using System.Collections.Generic;
using System.Linq.Expressions;
using System.Threading.Tasks;
namespace Senua.Interfaces
{
public interface IRepository<T>
{
Task<IEnumerable<T>> FindAllAsync();
Task<IEnumerable<T>> FindByConditionAsync(Expression<Func<T, bool>> expression);
void Create(T entity);
void Update(T entity);
void Delete(T entity);
Task SaveAsync();
}
}
Мне нужны некоторые рекомендации по этому вопросу, я никогда раньше не устанавливал асинхронные репотак что это немного новое, насколько я вижу, все в порядке, и я проверил с почтальоном.Я заметил, что есть также ToDataSourceAsync, но, попробовав это, он тоже не сработал.
TIA