我有一个表,我在MVC 4(Razor)中使用foreach循环构建,我正在尝试将其转换为WebGrid以利用排序。目前,我只是想让format
参数为我工作,以便我可以根据需要重新创建列。这是一个我无法工作的简单例子:
grid.Column(
columnName: "ChangeId",
format: (item) => @Html.DisplayFor(m => (item as ChangeStateViewModel).ChangeId)
)
在渲染过程中不输出任何内容:
<td></td>
我做错了什么?我尝试删除(item) =>
并使用<text>...</text>
,但这也没有显示我的价值。
修改
如果我将其更改为以下here,则会显示该项目中的所有属性;然而,从那里建造只是让我回到原来的位置。
format: @<text>@Html.DisplayFor(x => item)</text>
EDIT2
format: @<text>@item.ChangeId</text>
当然有效,但不能让我提供DisplayTemplate。
EDIT3
看起来(item as ChangeStateViewModel).ChangeId
正在给我NULL
..但为什么?如果我只使用@item.ChangeId
,那就很有价值。
EDIT4
看起来提供的默认项目(当您使用@<text>...</text>
时)是System.Web.Helpers.WebGridRow
,这就是 EDIT3 提供其行为的原因。像下面这样的东西可以工作,但只有你把它发送到DisplayTemplate;出于某种原因,如果您删除, "DisplayAny"
部分,则无法显示。
format: @<text>@Html.DisplayFor(x => (item as WebGridRow)["ChangeId"], "DisplayAny")</text>
这确实使 EDIT2 相当混乱。
答案 0 :(得分:0)
这是有效的,所以我在这里停下来并将其标记为答案。但是,如果有更好的方法来解决这个问题,我很乐意听到它们。
format: @<text>@Html.DisplayFor(x => (item as WebGridRow)["ChangeId"], "DisplayAny")</text>
DisplayTemplate是必需的;否则,这将不会显示。