sintaxis mvc extension cshtml code c# asp.net-mvc asp.net-mvc-3 razor

c# - mvc - ¿Cómo defino un método en Razor?



razor insert c# code (5)

¿Cómo defino un método en Razor?


¿Te refieres al ayudante en línea?

@helper SayHello(string name) { <div>Hello @name</div> } @SayHello("John")


Dejando solo cualquier debate sobre cuándo (si alguna vez) debería hacerse, @functions es cómo lo haces.

@functions { // Add code here. }


Es muy simple definir una función dentro de la maquinilla de afeitar.

@functions { public static HtmlString OrderedList(IEnumerable<string> items) { } }

Así que puedes llamar a la función en cualquier parte. Me gusta

@Functions.OrderedList(new[] { "Blue", "Red", "Green" })

Sin embargo, este mismo trabajo se puede hacer a través del helper también. Como ejemplo

@helper OrderedList(IEnumerable<string> items){ <ol> @foreach(var item in items){ <li>@item</li> } </ol> }

¿¿Entonces cuál es la diferencia?? De acuerdo con este post anterior, tanto @helpers como @functions comparten una cosa en común: hacen que el código sea una posibilidad dentro de las páginas web. También comparten otra cosa en común: se ven iguales a primera vista, lo que puede causar un poco de confusión sobre sus roles. Sin embargo, no son lo mismo. En esencia, un ayudante es un fragmento reutilizable de Razor sytnax expuesto como un método, y está destinado a representar HTML en el navegador, mientras que una función es un método de utilidad estática que se puede llamar desde cualquier lugar dentro de su aplicación de páginas web. El tipo de retorno para un ayudante siempre es HelperResult, mientras que el tipo de retorno para una función es lo que quieras que sea.


Razor es solo un motor de plantillas.

Debes crear una clase regular.

Si desea crear un método dentro de una página de Razor, colóquelos en un bloque @functions .


También podrías hacerlo con un Func como este.

@{ var getStyle = new Func<int, int, string>((width, margin) => string.Format("width: {0}px; margin: {1}px;", width, margin)); } <div style="@getStyle(50, 2)"></div>