我的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);
}