2015-07-28 7 views
5

sto facendo un componente per formattare un elenco, si tratta di un'estensione, ho scritto il seguente codice, ma, quando in tempo di esecuzione, mi dà l'errore:espressione di HelperResult per formattare voce da una lista

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

Questa è l'estensione:

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

vista chiamante:

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

ho già provato a cambiare da HelperResult a d ynamic, ma non ha funzionato troppo.

Non voglio utilizzare solo Func<object, HelperResult> come suggerito in alcuni post in StackOverFlow, perché ci saranno degli elementi all'interno dello <text></text>, che devono essere digitati con forza come elemento di ListType.

Il formato può essere diverso nelle mie visualizzazioni, quindi non è possibile utilizzare un modello per ListType.

C'è un modo per farlo, anche quello che non usa l'espressione?

Grazie

+0

Hai contrassegnato 'FormatMyList()' come metodo di estensione, ma non lo stai chiamando su alcun oggetto. Invece, lo stai usando come metodo statico, il che significa che manchi uno dei parametri. –

+0

Si passa 'formatExp' non come' Expression' ma come 'Func' già. –

+0

È un'estensione da HtmlHelper, nel pezzo di codice di vista, puoi vedere: Htm.FormatMyList. Html in questo contesto è un HtmlHelper. –

risposta

0

ho fatto, invece di usare un'espressione Expression<Func<TValue, System.Web.WebPages.HelperResult>>, ho usato solo un Func:

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

Vista:

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

ho usato il tasto "voce" a accedere alle proprietà LisType.

Il motivo univoco per utilizzare un'espressione era accedere alle proprietà fortemente digitate, poiché è possibile utilizzare la chiave "elemento", non ho più bisogno di un'espressione.

Funziona per me, grazie.