2010-01-04 8 views
5

nach Wochen der dieses Problem hat schließlich entschied ich mich für eine Lösung für das folgende Problem zu fragen:Wie Namespace Problem mit automatisch generierten Master-Eigenschaft beheben, wenn Mastertype gesetzt

In der ASPX-Seite können Sie einstellen,

<%@ MasterType VirtualPath="~/Mastername.master" %> 

Dies führt zu einer automatisch generierten Eigenschaft in der .aspx.designer

public new Mastername Master { 
    get { 
     return ((Masternamee)(base.Master)); 
    } 
} 

Arbeiten völlig in Ordnung. Aber wenn ich Änderungen in der ASPX-Datei, wird die Eigenschaft sein neues Auto erzeugt, und es sieht wie folgt aus:

public new NAMESPACE1.Mastername Master { 
      get { 
       return ((NAMESPACE1.Mastername)(base.Master)); 
      } 
     } 

Compilieren wird danach nicht möglich sein, weil die Klasse für die Masterpage kann nicht auf der gelöst werden gegebener Namespace. Die Masterpage hat NAMESPACE1 als Namespace.

Jede Inhaltsseite hat denselben NAMESPACE1. Die automatisch generierte Eigenschaft versucht in NAMESPACE1.NAMESPACE1 nach der Masterpage-Klasse zu suchen, die fehlschlägt, da sie nicht existiert. Natürlich kann ich den ersten NAMESPACE1 entfernen. um die App wieder kompilierbar zu machen, aber es ist einfach fast jedes Mal, wenn ich Änderungen an der .aspx-Datei mache.

Gibt es eine Möglichkeit, dieses Problem zu vermeiden? Der einzige Weg, an den ich denken kann, ist, die automatisch generierte Eigenschaft zu ignorieren und eine explizite Umwandlung jedes Mal vorzunehmen, wenn ich Zugriff auf die Masterseite haben möchte.

Bearbeiten: Ich verwende Visual Studio 2008 Professional SP1.

+0

BTW, habe ich hatte nie das Problem nach – citronas

Antwort

0

ich eine Lösung gefunden, die funktioniert. Ich werde die automatisch generierte Eigenschaft nicht in der Designerdatei verwenden. Ich schreibe meine eigene Wrapper-Eigenschaft, die ich auf jeder Content-Seite implementiere.

+1

das ist überhaupt nicht sehr befriedigend. – mcoolbeth

+0

@mcoolbeth: eine bessere Lösung gefunden? – citronas

+0

@citronas: leider nein. Ich entschuldige mich, wenn mein Kommentar als erniedrigend empfunden wurde. Es sollte mitfühlend sein. Ich werde hier eine Antwort posten, wenn ich eine sauberere Lösung finde. – mcoolbeth

1

Aus irgendeinem Grund der Designer glaubt, dass die Masterseite in Namespace NAMESPACE1 definiert ist, so überprüfen Sie die Masterseitendefinition (und Code dahinter) zu überprüfen, seinen Namespace wurde nicht geändert (möglicherweise versehentlich).

Wenn nichts offensichtlich ist, kann eine Suche in allen Dateien (* .cs, * .aspx, * .master, ...) für NAMESPACE1 erforderlich sein.

(Dies ist, wo ein VCS würde helfen, --- können Sie die Geschichte der Änderungen überprüfen.)

+0

tritt in serveral verschiedenen Projekten Dieses Problem zu VS2010 aktualisieren. Der Namespace der Masterpage hat sich in keinem dieser Projekte geändert. – citronas

1

Eigentlich ist es eher ein Designer "Feature". ;-)

Der Master-Name, der in Ihrer Designer-Datei verwendet wird, wird aus der Inherits-Eigenschaft Ihrer .Master-Datei abgerufen. Ändern Sie daher, wie Sie das Attribut "Inherits" qualifizieren. Dadurch wird der Klassenname geändert, der beim Erstellen der Designerdatei verwendet wird.

+0

Wechsel zu was? – pashute

0

Ich hatte das gleiche Problem, wenn ich <%@ MasterType VirtualPath="~/TestMaster.Master" %> meiner aspx Seite in SOURCE Ansicht hinzugefügt habe. Aus irgendeinem Grund wurde die Seite nie korrekt erstellt und gab mir so lange ungültige Namespace-Fehler, bis ich tatsächlich in die DESIGN-Ansicht wechselte und die Größe eines Steuerelements änderte und schließlich verschwand der Fehler. Irgendwo verwendete es zwischengespeicherte Daten (selbst eine Build/Clean-Lösung löschte es nicht) und bis der Designer die Seite neu erstellt, erzeugt es diesen Fehler.

0

ändern

<%@ MasterType VirtualPath="~/Mastername.master" %> 

zu

<%@ MasterType TypeName="Mastername" %> 

das perfekt funktioniert