Quando si trova MasterPageFile in ASP.NET MVC WebForms ViewEngine
-
05-07-2019 - |
Domanda
Quando viene verificata la proprietà MasterPageFile di una vista / pagina che esiste nel motore di visualizzazione ASP.NET MVC WebForms?
Quello che voglio fare è avere il seguente codice che non genera l'errore:
Messaggio di errore del parser: il file '/SomePlaceThatDosentExist/Site.Master' non esiste.
Definito come tale nel file .aspx della mia vista:
<%@ Page Language="C#" MasterPageFile="~/SomePlaceThatDosentExist/Site.Master" Inherits="System.Web.Mvc.ViewPage" >
Dove dovrei scrivere del codice per entrare e definire una proprietà MasterPageFile valida?
Nella mia classe ViewPage personalizzata ho provato quanto segue ereditato dalle mie visualizzazioni
public override string MasterPageFile
{
get
{
return base.MasterPageFile;
}
set
{
base.MasterPageFile = "~/RealPlace/Site.Master";
}
}
e ho provato anche quanto segue (in una classe di pagine di visualizzazione personalizzata ereditata dalle mie visualizzazioni)
protected override void OnPreInit(EventArgs e)
{
base.MasterPageFile = "~/RealPlace/Site.Master";
base.OnPreInit(e);
}
In entrambi i casi, viene visualizzato l'errore sopra indicato.
Da quello che so, OnPreInit è il primo punto del ciclo di vita di ViewPage, quindi è possibile andare ancora prima nel ciclo di vita?
Nota prima di scrivere e rispondere:
- So di return View (" ViewName " ;, " MasterPageName ");
- Conosco pagine master dinamiche, ma voglio svolgere questo specifico compito
Soluzione
La soluzione migliore per risolvere il problema è probabilmente quella di creare un VirtualPathProvider
Altri suggerimenti
Se vuoi cambiare il modo in cui viene trovata una pagina master, puoi implementare il tuo motore di visualizzazione:
public CustomViewEngine()
{
MasterLocationFormats = new string[] {
"~/RealPlace/Site.Master""
};
}