ASP.NET、Kendo UI、CS1660:无法将 lambda 表达式转换为类型“字符串”

Posted

技术标签:

【中文标题】ASP.NET、Kendo UI、CS1660:无法将 lambda 表达式转换为类型“字符串”【英文标题】:ASP.NET, Kendo UI, CS1660: Cannot convert lambda expression to type 'string' 【发布时间】:2015-02-06 02:18:01 【问题描述】:

帖子底部的解决方案

几天来,我一直在努力通过 Kendo.UI 网格查看我的数据, 我想我无法理解一些关于如何做到这一点的基本概念,因为我是 aspnet 和所有这类东西的新手。

索引.cshtml

 @using Kendo.Mvc.UI
 @using System.Linq;


    @(Html.Kendo().Grid<CardsDemo.Models.CardsViewModel>()
    .Name("Grid")
    .Columns(columns =>
    
    columns.Bound(p => p.Name).Title("Card ID").Width(130);
    columns.Bound(p => p.State).Title("State").Width(130);
    columns.Bound(p => p.ExpirationDate).Title("Expiration Date").Width(130);
)
.Pageable()
.Sortable()
.Scrollable(scr => scr.Height(430))
.Filterable()
.DataSource(dataSource => dataSource
    .Ajax()
    .PageSize(20)
    .ServerOperation(false)  
    .Read(read => read.Action("GetCards", "Home"))   
 ).Render()
)

HomeController.cs:

...
    [HttpGet]
        public ActionResult Index()
        
            return View();
        

    [HttpPost]
        public JsonResult GetCards([DataSourceRequest] DataSourceRequest request)
        
            var cards = repository.GetAll();
            var cardsvm = new CardsViewModel(cards);
            return Json(cardsvm.GetCards.ToDataSourceResult(request), JsonRequestBehavior.AllowGet);
        
...

项目构建没有错误,但是网页显示:

Server Error in '/' Application.

    Compilation Error

    Description: An error occurred during the compilation of a resource required to service this request. Please review the following specific error details and modify your source code appropriately. 

    Compiler Error Message: CS1660: Cannot convert lambda expression to type 'string' because it is not a delegate type

    Source Error:


    Line 8:      .Columns(columns =>
    Line 9:      
    Line 10:         columns.Bound(p => p.Name).Title("Card ID").Width(130);
    Line 11:         columns.Bound(p => p.State).Title("State").Width(130);
    Line 12:         columns.Bound(p => p.ExpirationDate).Title("Expiration Date").Width(130);

    Source File: c:\Users\me\Documents\Visual Studio 2013\Projects\CardsDemo\Views\Home\Index.cshtml    Line: 10 

编辑:按照建议,我尝试设置断点并发现程序在索引结束后立即崩溃(包括 homeControllers 索引操作代码);

EDIT2 : @clement layout.cshtml 中的 Kendo() 用红色下划线表示

Error   3   'System.Web.WebPages.Html.HtmlHelper' does not contain a definition for 'Kendo' and no extension method 'Kendo' accepting a first argument of type 'System.Web.WebPages.Html.HtmlHelper' could be found (are you missing a using directive or an assembly reference?)   c:\Users\me\Documents\Visual Studio 2013\Projects\CardsDemo\Views\Home\Index.cshtml 3   12  CardsDemo

我相信这是一个与 Visual Studio 相关的错误,它也与 IntelliSense 在 cshtml 文件中无法正常工作有关。 我的同事说他们的项目中也有这个,但他们只是忽略了它,它确实有效。

解决方案:因此,如果您将 Index.cshtml 更改为:

@model ICollection<CardsDemo.Models.CardViewModel>

    @(Html.Kendo().Grid(Model)
    .Name("Grid")
    .Columns(columns =>
    
        columns.Bound(p => p.Name);
        columns.Bound(p => p.State);
        columns.Bound(p => p.ExpirationDate);
    )
    .Pageable()
    .Sortable()
    .Scrollable(scr => scr.Height(430))
    .Filterable()
    .DataSource(dataSource => dataSource
                .Ajax()
                .PageSize(20)
                .Read(read => read.Action("GetCards", "Home"))
                )
    )

【问题讨论】:

您可能希望将 System.Linq 交换为 System.Data.Entity 我在这个项目中使用 NHibernate 【参考方案1】:

看起来您在使用 Linq 时没有将 System.Linq 嵌入到视图中。

编辑: 您可以将断点放入视图/控制器并确保您发送到视图的“名称”属性是字符串吗?

【讨论】:

'@using System.Linq;'不会改变任何东西,不管我有没有:( @mattytommo 抱歉我没看到 我已经更新了问题(请参阅问题末尾的编辑)感谢您的帮助 'Name' 是一个整数,尝试将其更改为字符串,没有帮助。 总是同样的错误?没有例外?如果有异常,你能在全局 asax 中创建一个 Application_Error 来捕获异常吗?

以上是关于ASP.NET、Kendo UI、CS1660:无法将 lambda 表达式转换为类型“字符串”的主要内容,如果未能解决你的问题,请参考以下文章

Kendo UI Web 和 Kendo UI ASP.NET for MVC 之间的区别

使用 Kendo UI Asp.net mvc core 未显示图表组件

asp.net mvc kendo ui grid 加密列数据

asp.net core kendo ui 网格自定义命令模板不起作用

带有 Asp.net MVC 的 Kendo UI 图表

用于 jquery CRUD 的 Asp.net core mvc + kendo ui