Quand le fichier MasterPageFile est-il situé dans ASP.NET MVC WebForms ViewEngine
-
05-07-2019 - |
Question
Quand la propriété MasterPageFile d'une vue / page est-elle vérifiée qu'elle existe dans le moteur de vue ASP.NET MVC WebForms?
Ce que je veux faire, c'est que le code suivant ne génère pas l'erreur:
Message d'erreur d'analyse: le fichier '/SomePlaceThatDosentExist/Site.Master' n'existe pas.
Défini comme tel dans le fichier .aspx de mon écran:
<%@ Page Language="C#" MasterPageFile="~/SomePlaceThatDosentExist/Site.Master" Inherits="System.Web.Mvc.ViewPage" >
Où aurais-je besoin d'écrire du code pour définir une propriété MasterPageFile valide?
Dans ma classe ViewPage personnalisée, j'ai essayé ce qui suit pour hériter de mes vues
public override string MasterPageFile
{
get
{
return base.MasterPageFile;
}
set
{
base.MasterPageFile = "~/RealPlace/Site.Master";
}
}
et a également essayé ce qui suit (dans une classe de page de vue personnalisée héritée de mes vues)
protected override void OnPreInit(EventArgs e)
{
base.MasterPageFile = "~/RealPlace/Site.Master";
base.OnPreInit(e);
}
Dans les deux cas, l'erreur que j'ai indiquée ci-dessus est affichée.
D'après ce que je sais, OnPreInit est le point le plus précoce du cycle de vie d'une ViewPage. Il est donc possible d'aller plus tôt dans le cycle de vie?
Remarque avant d'écrire et de répondre:
- Je connais la vue de retour (" ViewName """ MasterPageName ");
- Je connais les pages maîtres dynamiques, mais je souhaite accomplir cette tâche spécifique
La solution
La meilleure solution pour résoudre le problème consiste probablement à créer un VirtualPathProvider
Autres conseils
Si vous souhaitez modifier la manière dont une page maître est trouvée, vous pouvez implémenter votre propre moteur de vue:
public CustomViewEngine()
{
MasterLocationFormats = new string[] {
"~/RealPlace/Site.Master""
};
}