使用WebGrid.column中的HTML.ActionLink中的数据是不可能的?

Tho*_*mas 19 c# webgrid asp.net-mvc-3

我的ASP.NET MVC3测试应用程序中有以下WebGrid.它显示了一个客户列表:

@grid.GetHtml(
tableStyle: "grid",
headerStyle: "head",
alternatingRowStyle: "alt",
columns: grid.Columns
         (
         grid.Column(format: (item) => Html.ActionLink("Edit", "Details", new { id = item.id })),
         grid.Column("Address.CompanyName"),
         grid.Column("Address.City")
         )
)
Run Code Online (Sandbox Code Playgroud)

这里有趣的部分是我在第一列中添加的Edit-link.我想使用客户帐号而不是简单的"编辑"测试.但是,这给我带来了很多问题.

我试过了:

grid.Column(format: (item) => Html.ActionLink(item.AccountNumber.ToString(), "Details", new { id = item.id })),
Run Code Online (Sandbox Code Playgroud)

但是,似乎有一些我不明白这是如何工作的,因为我一直得到这个例外:

CS1502: The best overloaded method match for 'System.Web.Helpers.WebGrid.Column(string, string, System.Func<dynamic,object>, string, bool)' has some invalid arguments
Run Code Online (Sandbox Code Playgroud)

任何人都可以向我解释为什么这不起作用?"编辑"和item.AccountNumber.ToString()(除了拼写)有什么区别?

我应该注意到链接在使用"编辑" - 文本时起作用,这AccountNumber很长.

Der*_*tie 28

这是我如何用日期做的一个例子.

grid.Column(columnName: "Date", format: (item) => Html.ActionLink(((string)item.Date), "Edit", new { id = item.id })),          
Run Code Online (Sandbox Code Playgroud)

你必须小心使用扩展方法(Html.*)和动态(项目)...它在csharp中不能很好地工作.当您执行新的{}投影或调用ToString时,它不再是动态的.或者,您可以强制转换:( object)item.Id.

这里开始.


小智 5

万一有人想知道它应该在VB中看起来这是一个例子:

grid.Column("PersonID", "Admin", Function(modelItem) Html.ActionLink("View", "Details", New With {.id = modelItem.PersonID}))
Run Code Online (Sandbox Code Playgroud)