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
Était-ce utile?

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""
    };
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top