微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何让排序和分组适用于 Telerik 的 ASP.NET CORE 网格 UI?

如何解决如何让排序和分组适用于 Telerik 的 ASP.NET CORE 网格 UI?

我正在使用 asp.net core MVC、Telerik UI、IRepository 模式和自动映射器构建一个小型应用程序。这是我第一次使用 Telerik UI、IRepositories 和自动映射器。 这是我的版本:

<ItemGroup>
        <packagereference Include="AutoMapper.Extensions.Microsoft.DependencyInjection" Version="8.1.1" />
        <packagereference Include="Microsoft.CodeDom.Providers.DotNetCompilerPlatform" Version="3.6.0" />
        <packagereference Include="Microsoft.EntityFrameworkCore.Design" Version="5.0.3">
            <PrivateAssets>all</PrivateAssets>
            <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
        </packagereference>
        <packagereference Include="Microsoft.EntityFrameworkCore.sqlite" Version="5.0.3" />
        <packagereference Include="Microsoft.EntityFrameworkCore.sqlServer" Version="5.0.3" />
        <packagereference Include="Microsoft.EntityFrameworkCore.Tools" Version="5.0.3">
            <PrivateAssets>all</PrivateAssets>
            <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
        </packagereference>
        <packagereference Include="System.Configuration.ConfigurationManager" Version="5.0.0" />
        <packagereference Include="System.DirectoryServices.AccountManagement" Version="5.0.0" />
        <packagereference Include="Telerik.UI.for.AspNet.Core" Version="2021.1.119" />
    </ItemGroup>

我在从服务器端获取数据以绑定到客户端所做的更改时遇到问题。具体来说,当我尝试根据嵌套对象对 Telerik 网格进行分组或排序时。这是我的代码

public class CostCenterDto
    {
        [ScaffoldColumn(false)]
        public int Id { get; set; }
        [ScaffoldColumn(false)]
        public int DepartmentId { get; set; }
        [required]
        public string Name { get; set; }
        public bool Active { get; set; }
        //public int DepartmentId { get; set; }
        [required]
        public string Fund { get; set; }

        [UIHint("DepartmentEditor")]
        public DepartmentDto Department { get; set; }
    }
public class CostCenterController : Controller
    {
        private readonly ICostCenterRepo _db;
        private readonly IDepartmentRepo _deptDB;
        private readonly IMapper _mapper;

        public CostCenterController(ICostCenterRepo costCenterRepo,IDepartmentRepo deptRepo,IMapper mapper)
        {
            _db = costCenterRepo;
            _deptDB = deptRepo;
            _mapper = mapper;
        }

        public IActionResult Index()
        {
            return View();
        }

        [AcceptVerbs("Post")]
        public JsonResult Create([DataSourceRequest] DataSourceRequest request,CostCenterDto costCenterDto)
        {
            CostCenter c = _mapper.Map<CostCenter>(costCenterDto);
            c.DepartmentId = c.Department.Id;
            if (c != null && ModelState.IsValid)
            {
                _db.AddcostCenter(c);
                _db.Save();
            }

            return Json(ModelState.IsValid ? true : ModelState.ToDataSourceResult());
        }

        public JsonResult Read([DataSourceRequest] DataSourceRequest request)
        {
            IEnumerable<CostCenter> centers = _db.GetCostCenters();
            IEnumerable<CostCenterDto> mappedCenters = _mapper.Map<IEnumerable<CostCenterDto>>(centers);
            DataSourceResult response = mappedCenters.ToDataSourceResult(request); <===Exception thrown
            return Json(response);
        }

        [AcceptVerbs("Post")]
        public JsonResult Update([DataSourceRequest] DataSourceRequest request,CostCenterDto costCenterDto)
        {
            CostCenter c = _mapper.Map<CostCenter>(costCenterDto);
            if (c != null && ModelState.IsValid)
            {
                _db.UpdateCostCenter(c);
                _db.Save();
            }

            return Json(ModelState.IsValid ? true : ModelState.ToDataSourceResult());
        }
    }
@using BCC_PurchasingAuth.DTOs
@using Kendo.Mvc.UI
@{
    ViewData["Title"] = "Cost Centers";
}

@(Html.Kendo().Grid<CostCenterDto>(@*Model*@)
    .Name("CostCenters")
    .Columns(columns =>
    {
        columns.Bound(c => c.Name).Title("Cost Center");
        columns.Bound(c => c.Department).ClientTemplate("#: Department.Name #").Title("Department");
        columns.Bound(c => c.Fund);
        columns.Command(command => { command.Edit(); }).Width(160);
    })
    .DataSource(dataSource => dataSource
        .Ajax()
        .PageSize(20)
        .Events(events => events.Error("error_handler"))
        .Model(model =>
        {
            model.Id(c => c.Id);
            model.Field(c => c.Id).Editable(false);
            model.Field(c => c.Department).DefaultValue(new BCC_PurchasingAuth.DTOs.DepartmentDto());
        })
        .Create(create => create.Action("Create","CostCenter"))
        .Read(r => r.Action("Read","CostCenter"))
        .Update(update => update.Action("Update","CostCenter"))
    //.Destroy(update => update.Action("Delete","CostCenter"))
    )
    .ToolBar(toolbar => toolbar.Create())
    .Editable(editable => editable.Mode(GridEditMode.PopUp).TemplateName("CostCenterEditor"))
    .Pageable()
    .sortable()
    .Scrollable()
    .Filterable()
    .Selectable()
    .Groupable()
    .HtmlAttributes(new { style = "height:700px;" })

)

当我尝试根据“部门”列进行排序或分组时,出现以下错误... 从检查控制台:

jquery.min.js:4 POST https://localhost:44304/CostCenter/Read 500 (Internal Server Error)
send    @   jquery.min.js:4
ajax    @   jquery.min.js:4
read    @   kendo.all.js:6550
read    @   kendo.aspnetmvc.js:257
(anonymous) @   kendo.all.js:7673
_queueRequest   @   kendo.all.js:7939
read    @   kendo.all.js:7666
query   @   kendo.all.js:8183
_query  @   kendo.all.js:8580
sort    @   kendo.all.js:8644
_click  @   kendo.all.js:55847
d   @   jquery.min.js:2
dispatch    @   jquery.min.js:3
r.handle    @   jquery.min.js:3

我在控制器的 Read() 操作中标记的行处从 IIS Express 调试器收到此异常:

System.ArgumentException: 'At least one object must implement IComparable.'

根据嵌套对象进行排序和分组时,我缺少什么?

如果需要任何其他信息,请告诉我。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。