Funciones MVC Razor compartidas en varias vistas

Tengo funciones en mi vista que están compartidas por varias páginas:

@functions { public HtmlString ModeImage(ModeEnum mode) { switch(mode) { case AMode: new HtmlString("<img etc..."); break; // more etc... } } } 

¿Hay una manera de tenerlo en un archivo separado e incluirlo en cada página sin tener que copiarlo y pegarlo en cada una? Sé que puedo escribir un archivo .cs y acceder a él por página, pero la función realmente concierne a la vista y odio tener que volver a comstackr si esta función cambia.

Parece que quieres los métodos de Razor @helper descritos en la publicación del blog ASP.NET MVC3 y la syntax de @helper dentro de Razor por Scott Guthrie.

Aquí está el resumen … “La syntax de @helper dentro de Razor te permite crear fácilmente métodos de ayuda reutilizables que pueden encapsular la funcionalidad de salida en tus plantillas de visualización. Permiten una mejor reutilización del código y también pueden facilitar un código más legible”.

(Aquí hay una versión más detallada de las respuestas existentes.)

Cree una carpeta llamada App_Code en la raíz del proyecto MVC si aún no existe. Aquí, crea una vista de maquinilla de afeitar vacía y nómbrela como quieras:

Proyecto MVC con vista Razor llamado Shared.cshtml dentro de la carpeta App_Code

Agregue @helper s y / o métodos static según sea necesario:

 @helper ShowSomething() { Something } @functions { public static int CalculateSomething() { return 1; } } 

Luego, úselos desde sus vistas accediendo primero a la vista compartida por nombre:

 @Shared.ShowSomething() @Shared.CalculateSomething() 

Podría hacer una página de ayuda estática y poner un método static normal en la página.
Luego puede llamarlo escribiendo PageName.MyMethod() cualquier lugar, y creo que no necesitará recomstackr el proyecto.