我有一个使用 MVC 4 (Razor) 中的 foreach 循环构建的表,我正在尝试将其转换为 WebGrid 以利用排序。目前,我只是想让format
参数为我工作,以便我可以根据需要重新创建列。这是一个我无法开始工作的简单示例:
grid.Column(
columnName: "ChangeId",
format: (item) => @Html.DisplayFor(m => (item as ChangeStateViewModel).ChangeId)
)
这在渲染期间不输出任何内容:
<td></td>
我究竟做错了什么?我试过删除(item) =>
和使用<text>...</text>
,但这也没有显示我的价值。
编辑
如果我将其更改为以下内容,如此处所述,它会显示项目中的所有属性;然而,从那里开始建设只会让我回到原来的位置。
format: @<text>@Html.DisplayFor(x => item)</text>
编辑2
format: @<text>@item.ChangeId</text>
当然可以,但不能让我提供 DisplayTemplate。
编辑3
看起来像是(item as ChangeStateViewModel).ChangeId
在给我NULL
..但是为什么呢?如果我只使用@item.ChangeId
.
编辑4
看起来提供的默认项目(当您使用时@<text>...</text>
)是 a System.Web.Helpers.WebGridRow
,这就是EDIT3提供它所做的行为的原因。像下面这样的东西会起作用,但前提是你把它发送到 DisplayTemplate;出于某种原因,如果您删除该部分,它将不会显示, "DisplayAny"
。
format: @<text>@Html.DisplayFor(x => (item as WebGridRow)["ChangeId"], "DisplayAny")</text>
不过,这确实使EDIT2相当混乱。