ASP.NET Core 2中Kendo Grid替代Template<T>方法的技术咨询
解决Kendo Grid从ASP.NET MVC迁移到Core 2的模板缺失问题
我之前也踩过这个迁移的坑,Kendo UI for ASP.NET Core和旧版Kendo MVC在Grid列模板的API设计上做了不小调整,原来的服务器端Template()写法在Core版本里没法直接沿用了,给你两个可行的替代方案:
方案1:使用ClientTemplate(推荐)
Core版本的Kendo Grid更推荐用客户端模板实现自定义列内容,性能更优也贴合框架设计思路。你可以用Kendo的客户端模板语法拼接链接,同时借助Url.Action()生成正确的路由地址:
@model List<QuarterViewModel> @(Html.Kendo().Grid(Model) .Name("Quarter") .Columns(c => { c.Bound(m => m.Title).Title("Quarter"); c.Bound(m => m.YearNumber) .Title("Quarter") .ClientTemplate("<a href='" + Url.Action("Details", "YourControllerName") + "/#= QuarterId #'>#= YearNumber #-#= QuarterNumber #</a>"); }))
注意把代码里的YourControllerName替换成你实际的控制器名称,模板中的#= 字段名 #是Kendo客户端模板的语法,用来绑定当前行的数据字段。
方案2:使用服务器端Template
如果更习惯用服务器端Razor渲染的方式,Core版本的Kendo Grid提供了支持Razor模板的Template()重载,写法如下:
@model List<QuarterViewModel> @(Html.Kendo().Grid(Model) .Name("Quarter") .Columns(c => { c.Bound(m => m.Title).Title("Quarter"); c.Bound(m => m.YearNumber) .Title("Quarter") .Template(@<text> @Html.ActionLink($"{item.YearNumber}-{item.QuarterNumber}", "Details", new { id = item.QuarterId }) </text>); }))
这里的item是Kendo自动提供的当前行数据模型变量,直接用它访问模型属性即可,剩下的就是标准的Razor语法生成ActionLink。
简单说下原因:旧版Kendo MVC的Title()返回的列构建器类包含支持委托的Template()方法,而Core版本重构了API,把服务器端模板和客户端模板做了更明确的区分,所以原来的写法就失效了。
内容的提问来源于stack exchange,提问作者meataxe
相关产品推荐
相关产品推荐

