2015-07-28 9 views
5

mir eine Komponente zu tun, eine Liste zu formatieren, es ist eine Erweiterung, ich den folgenden Code geschrieben, aber, wenn in der Ausführungszeit, es mir die Fehlermeldung gibt:Expression von HelperResult zu formatieren Element aus einer Liste

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

Dies ist die Erweiterung:

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(""); 
     } 

Ansicht calling:

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

ich habe bereits versucht, von HelperResult bis d zu ändern Yamamic, aber hat auch nicht funktioniert.

Ich möchte nicht nur Func<object, HelperResult> wie in einigen Posts in StackOverFlow vorgeschlagen verwenden, weil es Elemente in der <text></text>, die stark als ein Element von ListType typisiert werden muss.

Das Format kann in meinen Ansichten unterschiedlich sein, daher kann ich keine Vorlage für ListType verwenden.

Gibt es eine Möglichkeit, das zu tun, auch wenn Sie den Ausdruck nicht verwenden?

Dank

+0

Sie haben 'FormatMyList()' als eine Erweiterungsmethode markiert, aber Sie rufen es für kein Objekt auf. Stattdessen verwenden Sie es als statische Methode, was bedeutet, dass einer der Parameter fehlt. –

+0

Sie übergeben 'formatExp' nicht als 'Expression', sondern als 'Func' bereits. –

+0

Es ist eine Erweiterung von HtmlHelper, in der Code of View können Sie sehen: Htm.FormatMyList. Html in diesem Zusammenhang ist es ein HtmlHelper. –

Antwort

0

ich es tat, statt Verwendung Ausdruck Expression<Func<TValue, System.Web.WebPages.HelperResult>>, habe ich nur ein Func:

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

Ausblick:

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

ich verwendet, um den "item" Schlüssel zu Greifen Sie auf die LisType-Eigenschaften zu.

Der einzige Grund, einen Ausdruck zu verwenden, war, auf die stark typisierten Eigenschaften zuzugreifen, da ich den "item" -Schlüssel verwende, brauche ich keinen Ausdruck mehr.

Es funktioniert mir, danke.

Verwandte Themen