2015-07-28 13 views
5

Robię komponent do sformatowania listy, jest to rozszerzenie, napisałem następujący kod, ale w czasie wykonywania, daje mi błąd:Wyrażenie HelperResult, aby sformatować element z listy

Cannot convert lambda expression to type 'System.Web.WebPages.HelperResult' because it is not a delegate type

jest to rozszerzenie:

public static MvcHtmlString FormatMyList<TModel, TValue>(this HtmlHelper<TModel> htmlHelper, IEnumerable<TValue> list, 
      Expression<Func<TValue, System.Web.WebPages.HelperResult>> formatExp = null) 
     { 

      foreach (var item in list) 
      { 
       var itemFormated = formatExp.Compile().Invoke(item).ToString(); 
      } 

      return new MvcHtmlString(""); 
     } 

Zobacz powołanie:

var test = Html.FormatMyList<ModelType, ListType>(list, formatExp: 
     x => 
      @<text> 
       This is format of @x.Cambio to test @x.Fala 
      </text>); 

próbowałem już zmienić z HelperResult do d ynamic, ale też nie działa.

Nie chcę używać tylko Func<object, HelperResult>, jak sugerowano w niektórych wpisach w StackOverFlow, ponieważ, będą pozycje wewnątrz <text></text>, które muszą być silnie wpisane jako element ListType.

Format może być różny w moich widokach, więc nie mogę użyć szablonu do ListType.

Czy istnieje sposób, aby to zrobić, nawet jeśli nie używasz wyrażenia?

Dzięki

+0

Użytkownik oznaczył 'FormatMyList()' jako metodę rozszerzenia, ale nie wywołuje się go na żadnym obiekcie. Zamiast tego używasz go jako metody statycznej, co oznacza, że ​​brakuje jednego z parametrów. –

+0

Przekazujesz 'formatExp' nie jako' Wyrażenie', ale już jako 'Func'. –

+0

Jest to rozszerzenie z HtmlHelper, w kawałku kodu widzenia, można zobaczyć: Htm.FormatMyList. Html w tym kontekście jest to HtmlHelper. –

Odpowiedz

0

to zrobiłem, zamiast stosowania wyrazem Expression<Func<TValue, System.Web.WebPages.HelperResult>>, użyłem tylko Func:

Func<TValue, System.Web.WebPages.HelperResult> 

Widok:

var test = Html.FormatMyList<ModelType, ListType>(list, format: 
     @<text> 
       This is format of @item.Cambio to test @item.Fala 
      </text>); 

użyłem przycisku "punkt" do dostęp do właściwości LisType.

Unikalnym powodem użycia wyrażenia było uzyskanie dostępu do właściwości mocno wpisanych, ponieważ mogę użyć klawisza "element", nie potrzebuję już wyrażenia.

To działa dla mnie, dzięki.