【问题标题】:MVC4 Razor WebGrid ErrorMVC4 Razor WebGrid 错误
【发布时间】:2012-08-08 20:36:14
【问题描述】:

我正在尝试在我的 Razor 视图上使用 WebGrid,但收到以下错误消息:

Compiler Error Message: CS1978: Cannot use an expression of type 
'lambda expression' as an argument to a dynamically dispatched operation

这是控制器的代码:

  var query = GetAll().ToList();
  ViewBag.grid = new WebGrid(students, rowsPerPage: 20);
  return View();

观点:

@{
    var grid = ViewBag.grid;
}
@grid.GetHtml("tblMain",
    columns: grid.Columns(
            grid.Column("Name", format: @<Text>Test</Text>)
        ))

我能够在我的控制器上使用 webgrid 并生成 HTML 并将其呈现在视图中,但是因为我需要模板,所以我尝试在视图而不是控制器中创建 webgrid。我在网上搜索过,同样的示例很少,但我仍然收到此错误。如果有任何帮助或想法,我将不胜感激。

【问题讨论】:

    标签: asp.net-mvc razor webgrid


    【解决方案1】:

    当您将 WebGrid 放入 ViewBag 时,它变成了一个动态对象,并且不支持以 lambda 表达式表示的委托。如果不想使用强类型视图,则在 ViewBag 中传递数据,而是在视图中构造网格,或者将网格转换为视图中的正确类型。

    【讨论】:

    • 未来需要记住的一点:您发布了很好的答案,并且您通常会在此处发布有用的答案,并且只使用链接作为附加参考。那很好。未来只需要记住一件小事:根据FAQ on Self-Promotion,每次链接到自己的网站/产品/库/等时,都必须披露这一事实。例如,如果您说“查看此文章了解更多信息”,您可以改为说“查看我网站上的这篇文章了解更多信息”。
    【解决方案2】:

    从 ViewBag 投射结果会将网格变量从动态类型更改为正确的类型。然后,您应该可以像以前一样使用它了。

    @{
        var grid = (WebGrid)ViewBag.grid;
    }
    @grid.GetHtml("tblMain",
        columns: grid.Columns(
                grid.Column("Name", format: @<Text>Test</Text>)
            ))
    

    【讨论】:

    • 也就是说,将学生列表呈现为网格是表示层的一部分,应该在视图中完成,而不是在控制器中完成。我建议将学生列表发送到视图,并在视图中创建您想要的任何演示文稿(在您的情况下是网格)。
    猜你喜欢
    • 1970-01-01
    • 2013-01-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-28
    • 1970-01-01
    • 2013-09-20
    相关资源
    最近更新 更多