2012-01-25 6 views
0
@{ 
    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; 
     } 
    } 

С приведенным выше кодом и моделью просмотра получите следующую ошибку на выделенной жирным шрифтом, почему это так?WebGrid grid.Columns Ошибка формата

Лучший перегружен матч метод «UI.Models.AuctionListViewModel.GetAuctionType (UI.AuctionService.Auction)» имеет некоторые недопустимые аргументы

ответ

2

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

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

format: auction => 
     uctionListViewModel.GetAuctionType(((WebGridRow)auction).Value) 
1

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

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

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

Смежные вопросы