You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 07:48:01