2011-08-01 14 views
5

Estoy tratando de pasar algo de Html construido usando el operador de razor @: a un método de ayuda, pero no puedo encontrar la manera de hacerlo. El compilador declara que la expresión Razor es una expresión lambda, pero no dice, ¿cómo es esta expresión lambda? ¡No hay pistas en absoluto!¿Es posible pasar una construcción Razor a un método auxiliar, usando el operador Razor @:?

Si trato de hacer esto:

 @(MyClass.MyMethod(new 
      { 
       Html = @:<div></div> 
      } 
     )) 

El error es como sigue: Cannot assign lambda expression to anonymous type property

Si intento esto en su lugar, entonces se dice que como un lambda de nuevo:

 @(MyClass.MyMethod(
      @:<div></div> 
     )) 

Si el MyMethod recibe una cadena: es decir, public string MyMethod(string razorConstructedString) , el compilador dice: Cannot convert lambda expression to type 'string' because it is not a delegate type.

La pregunta es: ¿qué tipo debo declarar MyMethod, para que pueda recibir el parámetro razor construido?

Gracias!

Respuesta

9

Esto se llama inline helper.
Es un Func<AnyType, HelperResult>.

Puede llamar a este delegado con un parámetro, y el parámetro estará accesible en el helper, llamado item.

+1

Muy buena publicación en el blog! –

+0

¿Cómo es que no puedo o cómo puedo pasar 'Func '? falla = (y no quiero '@helper (Func body) {

@body(null)
}' – Maslow

+0

@Maslow: Porque el compilador Razor genera una lambda que toma un parámetro. Consulte la publicación de mi blog. http://blog.slaks.net/2011/04/dissecting-razor-part-9-inline-helpers.html – SLaks

Cuestiones relacionadas