У меня есть таблица, которую я построил с помощью цикла foreach в MVC 4 (Razor), и я пытаюсь преобразовать ее в 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>
) является System.Web.Helpers.WebGridRow
, поэтому EDIT3 обеспечивает такое поведение. Что-то вроде приведенного ниже будет работать, но только если вы отправите его в DisplayTemplate; по какой-то причине он не будет отображаться, если вы удалите эту часть , "DisplayAny"
.
format: @<text>@Html.DisplayFor(x => (item as WebGridRow)["ChangeId"], "DisplayAny")</text>
Однако это делает EDIT2 довольно запутанным.