Diego, System.Web.Mvc.WebViewPage
es el tipo de base correcto (y debe tener otra clase que hereda de System.Web.Mvc.WebViewPage<TModel>
si desea obtener vistas con caracteres fuertes). Debe marcar su propia clase como abstract
para no tener que implementar el método Execute.
Actualización: Para configurar todas sus vistas para usar su clase base personalizada, consulte el archivo ~\Views\Web.config
. En su interior hay una sección específica de Razor donde puede usar el atributo pageBaseType
para configurar su tipo personalizado.
En lo que respecta a la propiedad Contexto, se debe inicializar por completo una vez que se está ejecutando la vista. Sin embargo, puede no estar disponible si intenta acceder demasiado pronto (por ejemplo, desde el constructor de clases). ¿Cuándo intentas acceder?
El método Execute es algo que proporciona el compilador Razor cuando se compila la vista. Por ejemplo, dada la siguiente archivo de vista
Hello @Name!
El compilador maquinilla de afeitar detrás de las escenas generan la siguiente clase (esto es una simplificación, así que los detalles podría ser apagado, pero debe transmitir el punto)
public class _Some_Generated_Class_Name_ : System.Web.Mvc.WebViewPage {
public void Execute() {
Write("Hello ");
Write(Name);
Write("!");
}
}
Luego el framework llama al método Execute en su clase de vista y su vista se ejecuta.
¿Podría agregar comportamientos a todas sus clases a través de métodos de extensión o necesita que sean métodos de instancia? – R0MANARMY
Principalmente necesito agregar algunas variables a las que se puede hacer referencia desde las vistas. Sé que podría lograr esto usando métodos de extensión, pero debería haber una manera de tener clases de página de vista personalizadas como con el motor de vista aspx. – Diego