0

我有一个使用 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相当混乱。

4

1 回答 1

0

这行得通,所以我停在这里并将其标记为答案。但是,如果有更好的方法来解决这个问题,我很想听听他们的意见。

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

显示模板是必需的;否则,这不会显示。

于 2013-03-07T15:51:54.020 回答