WebGrid格式不输出任何内容

时间:2013-03-06 17:03:16

标签: razor asp.net-mvc-4 webgrid

我有一个表,我在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 相当混乱。

1 个答案:

答案 0 :(得分:0)

这是有效的,所以我在这里停下来并将其标记为答案。但是,如果有更好的方法来解决这个问题,我很乐意听到它们。

format: @<text>@Html.DisplayFor(x => (item as WebGridRow)["ChangeId"], "DisplayAny")</text>

DisplayTemplate是必需的;否则,这将不会显示。