Сетка WebGrid. Ошибка формата столбцов - PullRequest
0 голосов
/ 25 января 2012
@{
    var grid = new WebGrid(Model.Auctions, rowsPerPage: Model.PagingInfo.ItemsPerPage, defaultSort: "AddedDate");
}

@grid.GetHtml(
        columns: grid.Columns(
                **grid.Column(columnName: "", header: "Type", format: (auction) => AuctionListViewModel.GetAuctionType(auction)),**
                grid.Column(columnName: "OwnerReference", header: "Owner reference")
            )
        );

public class AuctionListViewModel
    {
        public IEnumerable<Auction> Auctions { get; set; }
        public IEnumerable<Item> Items { get; set; }
        public PagingInfo PagingInfo { get; set; }
        public string Title { get; set; }
        public string Action { get; set; }

        public static string GetAuctionType(Auction auction)
        {
            var type = string.Empty;
            if (auction is LubAuction)
            {
                type = "Lowest unique wins";
            }
            else if (auction is EsfAuction)
            {
                type = "Highest wins";
            }

            return type;
        }
    }

Используя приведенный выше код и модель вида, получите следующую ошибку в строке, выделенной жирным шрифтом, почему это так?

Наилучшее совпадение перегруженного метода для 'UI.Models.AuctionListViewModel.GetAuctionType (UI.AuctionService.Auction)' имеет недопустимые аргументы

Ответы [ 2 ]

2 голосов
/ 25 января 2012

В параметре format параметра grid.Column метода (в вашем случае auction) вы получаете фактический элемент (Auction), но он упакован в динамическую оболочку с именем WebGridRow .

Вы можете использовать свои свойства в этой оболочке, и она делегирует фактическому элементу, например: auction.Title будет работать, но если вы хотите получить весь элемент (Auction), вам нужно использовать значениесобственность WebGridRow.

format: auction => 
      uctionListViewModel.GetAuctionType(((WebGridRow)auction).Value)
1 голос
/ 25 января 2012

Из-за динамической (слабой) типизации помощника WebGrid вам нужен приведение:

grid.Column(
    columnName: "", 
    header: "Type", 
    format: (auction) => AuctionListViewModel.GetAuctionType((Auction)auction.Value)
)

Я бы порекомендовал вам использовать лучшие помощники сетки, такие как MvcContrib Grid и Telerik Grid , который обеспечит вам надежную печать и время компиляции.

...