如何解决如何让排序和分组适用于 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 举报,一经查实,本站将立刻删除。