为什么我的kendoui网格没有显示我的数据,我是否错误地配置了自动应用程序



我的kendoui网格有问题,它没有显示返回的数据。我正在使用存储库模式和自动应用程序来提升一些使用ViewModels的Crunt作品。

简而言之,我的控制器向存储库询问所有具有特定ID的记录,并将其映射到视图模型,以避免循环引用。该集合存储在变量中,并以JSON的形式传递到网格中。

问题是,尽管数据返回(可观察到一个断路点),网格从未显示任何东西,我不知道为什么。

以下代码显示了我如何设置所有内容:

控制器

namespace DataAccessTest.Controllers
{
    public class GridController : Controller
    {
        private IFixturesRepository fixtureRepository;
        public GridController()
        {
            this.fixtureRepository= new FixturesRepository(new CoreEntities());
        }
        // GET: Grid
        public ActionResult Index()
        {
            return View();
        }
        // Id paramter is fed from a grid in a different view.
        public ActionResult fixtures([DataSourceRequest] DataSourceRequest request, int id)
        {
            //As the repository uses IQueryable I used .ProjectTo
            //which I read was the best way to handle it.
            var fixture = fixtureRepository.GetFixtures().Where(c => c.vessel_idx == id)
                .ProjectTo<FixturesViewModel>();                    
            return Json(fixture);
        }
    }
}

fixturesrepository

简短缩短

namespace DataAccessTest.DAL
{
    public class FixturesRepository : IFixturesRepository, IDisposable
    {
        private CoreEntities context;
        public FixturesRepository(CoreEntities context)
        {
            this.context = context;
        }        
        public IQueryable<tbl_vessel_fixtures> GetFixtures()
        {
            return context.tbl_vessel_fixtures;
        }
        ...
    }
}

ifixturesRepository

namespace DataAccessTest.DAL
{
    public interface IFixturesRepository : IDisposable
    {
        IQueryable<tbl_vessel_fixtures> GetFixtures();
    }
}

kendoui MVC网格

 @(Html.Kendo().Grid<DataAccessTest.ViewModels.FixturesViewModel>()
    .Name("fixtures")
    .Columns(columns =>
    {
        columns.Bound(c => c.vessel_idx)
            .Title("Vessel Id");
        columns.Bound(c => c.vessel_name)
            .Title("Name");
        columns.Bound(c => c.fixture_date)
            .Title("Date")
            .ClientTemplate("#=fixture_date ? kendo.toString(kendo.parseDate(fixture_date), 'dd/MM/yyyy') : '' #");
        columns.Bound(c => c.charterer_company)
            .Title("Charterer");
    })
    .Pageable()
    .Sortable(sort => sort.SortMode(GridSortMode.MultipleColumn))
    .Groupable()
    .DataSource(dataSource => dataSource
        .Ajax()
        .Read(read => read.Action("fixtures", "Grid", new { id = Model.vessel_idx }))
        .PageSize(10)
        .Sort(sort => sort.Add(a => a.fixture_date).Descending())
        ))

global.asax

这是我发起自动配置的地方。

    // Automapper
    Mapper.Initialize(cfg => cfg.CreateMap<FixturesViewModel, tbl_vessel_fixtures>().ReverseMap());

如果我不使用AutoMapper并手动创建此映射,则可以正常工作,但是如果我尝试使用AutoMapper,它确实会获取数据,但不会在网格中显示。我不确定我的配置是否错误。

谢谢。

好的,所以我找到了有关此类问题的一些其他详细信息(网格未返回数据)。这不是自动应用程序或方法本身的问题,我忘记要做的就是延长扩展方法.ToDataSourceResult。对该方法进行了一些更改,我现在有了我期望的数据。

public ActionResult fixtures([DataSourceRequest] DataSourceRequest request, int id)
{
    var fixture = fixtureRepository
        .GetFixtures()
        .Where(c => c.vessel_idx == id)
        .ProjectTo<FixturesViewModel>();
    var result = fixture.ToDataSourceResult(request);
    return Json(result);
}

最新更新