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
È stato utile?

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""
    };
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top