2012-08-08 96 views
0

我想使用的WebGrid我的剃须刀的看法,但我收到此错误信息:MVC4剃刀的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而不是控制器。我在网上搜索,有几个样本以同样的方式,但我仍然得到这个错误。我将不胜感激任何帮助或想法。

回答

1

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

+1

只是要记住未来:*您发布了很好的答案*,并且您通常在此发布有用的答案*,并且只使用链接作为附加参考。那很好。关于未来只有一件小事要记住:根据[自我促销常见问题解答](http://stackoverflow.com/faq#promotion),每次链接到自己的网站/产品/库时/等,你必须披露这一事实。因此,举例来说,如果您说“请参阅以获取更多信息”,您可以改为说:“请在我的网站上查看此文章以获取更多信息”。 – 2012-11-27 22:45:04

+0

让我们[在聊天中继续讨论](http://chat.stackoverflow.com/rooms/20225/discussion-between-andrew-barber-and-mike-brind) – 2012-11-28 08:41:13

0

从ViewBag转换结果会将网格变量从动态类型更改为正确的类型。然后你就可以像以前一样使用它。

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

也就是说,将学生列表呈现为网格是表示层的一部分,应该在视图中完成,而不是控制器。我建议将学生列表发送到视图,并在视图中创建想要的任何演示文稿(在您的案例中,网格)。 – 2013-03-26 16:54:59