2009-04-16 17 views
3

Ich habe eine MasterPage namens MyMasterPage erstellt.ASP.NET - Wie verweisen Sie auf eine Klasse, die nicht in app_code ist

public partial class MyMasterPage : System.Web.UI.MasterPage 
{ 
    protected void Page_Load(object sender, EventArgs e) 
    { 

    } 
} 

ich haben auch eine Klasse namens Class1 in app_code:

public class Class1 
{ 
    public Class1() 
    { 
     MyMasterPage m; 
    } 
} 

In Class1 Ich würde MyMasterPage verweisen möchte, aber ich erhalte eine Compiler-Warnung:

The type or namespace name 'MyMasterPage' could not be found (are you missing a using directive or an assembly reference?) 

Welche Code tun Ich muss hinzufügen, um das zu arbeiten?

Die Klassen sind in Ordnern wie folgt:

alt text http://www.yart.com.au/stackoverflow/masterclass.png

+0

Wo genau Ihre Masterpage Klasse Ihres App_Code in Beziehung? –

+0

Kann der Code in den Seiten auf Class1 im App_Code-Ordner zugreifen? – TechTravelThink

+0

Ich habe ein Diagramm hinzugefügt, um anzuzeigen, wo sich die Klassen befinden – Petras

Antwort

1

Versuchen Sie, Ihre Master-Seite in einem Namespace setzen

+0

Das funktioniert nicht, dann erkennt es den Namespace nicht – Petras

5

Sie verweisen Lage sein MyMasterPage nicht, wenn Sie es unter App_Code setzen auch . Normalerweise würden Sie in einer solchen Situation eine Basismasterseite erstellen, die von MasterPage erbt. z.B.

public partial class MasterPageBase : System.Web.UI.MasterPage 
{ 
    // Declare the methods you want to call in Class1 as virtual 
    public virtual void DoSomething() { } 

} 

Dann in Ihren aktuellen Masterseite, anstatt von System.Web.UI.MasterPage vererben, von Ihrem MasterPageBase erbt. Überschreiben Sie die virtuellen Methoden in Ihren erbenden Seiten.

public partial class MyMasterPage : MasterPageBase 

In Class1, wo Sie sich darauf beziehen müssen (und ich nehme an, dass Sie die Master-Seite von einer Seite Klasse Master Eigenschaft erhalten, Ihr Code aussehen ...

public class Class1 
{ 
    public Class1(Page Target) 
    { 
     MasterPageBase _m = (MasterPageBase)Target.MasterPage; 
     // And I can call my overwritten methods 
     _m.DoSomething(); 
    } 
} 

Es ist eine ziemlich langatmige Art und Weise, aber bis jetzt funktioniert das einzige, was mir beim ASP.NET-Modell einfällt:

1

fung hat einen schönen Vorschlag, indem er eine Base-Seite verwendet Die App_Code-Dateien werden in einer anderen Assembly gespeichert dann die ASPX-Seiten.Dies geschieht mit Website-Projekten.

Ich bin mir nicht sicher, ob Sie die Option in Ihrem Fall haben. Wenn Sie jedoch anstelle eines Website-Projekts das Webanwendungsprojekt auswählen, haben Sie dieses Problem nicht.

Hier ist eine Blog-Post, die etwas Licht kann: VS 2005 Web Project System: What is it and why did we do it? by Scott Guthrie

Verwandte Themen