Diego, System.Web.Mvc.WebViewPage
è il tipo di base corretto (e si dovrebbe avere un'altra classe che eredita da System.Web.Mvc.WebViewPage<TModel>
se si desidera una visualizzazione fortemente tipizzata). Dovresti contrassegnare la tua classe come abstract
in modo da non essere forzato ad implementare il metodo Execute.
Aggiornamento: Per configurare tutte le visualizzazioni per l'utilizzo della classe base personalizzata, esaminare il file ~\Views\Web.config
. All'interno di esso è presente una sezione specifica per il rasoio in cui è possibile utilizzare l'attributo pageBaseType
per configurare il tipo personalizzato.
Per quanto riguarda la proprietà Context, è necessario inizializzarlo completamente dopo l'esecuzione della vista. Tuttavia, potrebbe non essere disponibile se si tenta di accedervi troppo presto (ad esempio, dal costruttore delle classi). Quando stai cercando di accedervi?
Il metodo Execute è qualcosa che viene fornito dal compilatore Razor quando la vista è compilata. Ad esempio, dato il seguente file vista
Hello @Name!
Il compilatore Razor sarà dietro le quinte generano la seguente classe (questa è una semplificazione, in modo che i dettagli potrebbe essere spento, ma dovrebbe trasmettere il punto)
public class _Some_Generated_Class_Name_ : System.Web.Mvc.WebViewPage {
public void Execute() {
Write("Hello ");
Write(Name);
Write("!");
}
}
Quindi il framework chiama il metodo Execute sulla classe view e la vista viene eseguita.
È possibile aggiungere comportamenti a tutte le classi tramite metodi di estensione oppure è necessario che siano metodi di istanza? – R0MANARMY
Principalmente ho bisogno di aggiungere alcune variabili che possono essere referenziate all'interno delle viste. So che potrei ottenere ciò usando i metodi di estensione, ma ci dovrebbe essere un modo di avere classi di visualizzazione personalizzate come con il motore di visualizzazione aspx. – Diego