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

ASP.NET Core中Kendo Grid服务器端模板使用及VS2017报错求助

解决ASP.NET Core Kendo Grid服务器端模板的类型转换错误

这个问题我之前在项目里也踩过坑,其实是ASP.NET Core版本的Kendo Grid和传统MVC写法的小差异导致的。VS抛出的Cannot convert lambda expression to type 'string'错误,本质是Razor在解析服务器端模板时,没有正确识别你的lambda表达式绑定逻辑。下面给你两种最常用的解决方案:

方案一:使用内联Razor模板(推荐)

这是最直观且不易出错的写法,用@<text>包裹模板内容,内部直接通过@item访问当前行的模型属性:

@(Html.Kendo().Grid<YourModel>()
    .Name("yourGrid")
    .Columns(columns => {
        // 这里是你的服务器端模板列
        columns.Bound(p => p.ID).Template(@<text>
            <div class="action-buttons">
                <!-- 用@item.ID直接绑定当前行的ID属性 -->
                <a asp-action="Edit" asp-route-id="@item.ID" class="btn btn-sm btn-primary">编辑</a>
                <button onclick="deleteRecord(@item.ID)" class="btn btn-sm btn-danger">删除</button>
            </div>
        </text>);
        // 其他列配置...
    })
    // 如果是服务器端绑定,用下面的配置;Ajax绑定则保留Ajax数据源
    .DataSource(dataSource => dataSource
        .Server()
        .Read(read => read.Action("GetGridData", "YourController"))
    )
)

注意要点:

  • 替换YourModel为你实际的实体类,确保ID是该类的有效属性
  • 模板内部的@item会自动绑定到当前行的模型实例,无需额外声明
  • 如果需要使用HtmlHelper方法(比如Html.ActionLink),直接在模板内写即可,语法和普通Razor页面一致

方案二:Tag Helper写法(适合偏好HTML风格的开发者)

如果你用的是Kendo Grid的Tag Helper语法,服务器端模板需要通过context获取当前行模型:

<kendo-grid name="yourGrid">
    <columns>
        <column field="ID">
            <template>
                @{
                    // 先将context转换为你的模型类型
                    var currentItem = context as YourModel;
                }
                <a asp-action="Details" asp-route-id="@currentItem.ID">查看详情</a>
            </template>
        </column>
        <!-- 其他列... -->
    </columns>
    <!-- 服务器端绑定数据源 -->
    <datasource type="DataSourceTagHelperType.Server">
        <transport>
            <read url="@Url.Action("GetGridData", "YourController")" />
        </transport>
    </datasource>
</kendo-grid>

避坑提醒

  • 不要混淆服务器端模板和客户端模板:服务器端模板用Template()(或Tag Helper的<template>),绑定用@item/@currentItem;客户端模板用ClientTemplate(),绑定用#= ID #语法
  • 如果你的Grid是Ajax绑定,服务器端模板只会在首次渲染时生效,后续分页/筛选后会用客户端模板(如果配置了的话),这点要根据业务场景选择
  • 确保VS的Razor语法检查正常,有时候清理项目缓存(右键项目→清理)可以解决一些奇怪的语法提示错误

内容的提问来源于stack exchange,提问作者LP13

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 04:28:58