При использовании WebGrids я обнаружил, что могу получить доступ к свойствам модели, привязанной к WebGrid, но не могу получить доступ к методам самой модели.
Например, это работает:
// Accessing a property of item works
reportGrid.Column("", header: "First Name", format: item => item.firstName )
Но это не работает: (я показываю тривиальный пример, но в моем случае я должен вызвать метод самого объекта User.)
// Accessing a method on item does not work
reportGrid.Column("", header: "First Name Backwards", format: item => item.firstNameBackwards() )
=> error: 'System.Web.Helpers.WebGridRow' does not contain a definition for 'getFullName'
Похоже, это связано со следующим:
Почему нельзя Я использую свой метод расширения в делегате в Razor WebGrid http://www.mikesdotnetting.com/Article/171/Why-You-Can%27t-Use-Extension-Methods-With-A-WebGrid
Я не вижу способа применить эти решения к моей проблеме. Как утверждает Майк Бринд:
Аргумент, который принимает параметр Format WebGridColumn, является делегатом: Func. Это означает, что вам нужно передать динамический тип, а затем с ним что-то делают, прежде чем он будет возвращен как объект.
...
Когда вы пытаетесь использовать метод расширения, компилятор проверяет тип, для которого вы пытаетесь его использовать, чтобы увидеть, существует ли такой метод. Если нет. он проверит все базовые классы, от которых наследуется тип, чтобы увидеть, содержат ли они формальный метод с правильным именем.
Похоже, мой метод должен быть найден, но, возможно, не потому, что модель, привязанная к WebGrid, на самом деле является моделью подкачки, которая содержит IList<T> LineItems
, которые содержат мои ссылки на пользователя.
Есть ли способ преобразовать или получить ссылку на сам объект User, чтобы я мог вызывать определенные для него методы в дополнение к доступу к его свойствам?