2009-05-05 19 views
2

So habe ich Probleme, wenn ich versuche, die Website zu veröffentlichen. Ich bin in Visual Studio 2008 SP1.Namespace-Name für ASP.net-Benutzersteuerelement nicht gefunden

Ich habe eine Reihe von Benutzersteuerelementen und auf einigen Seiten verwende ich sie programmatisch.

Ich habe einen Verweis auf die aspx Seite

bekam
<%@ Reference Control="~/UserControls/Foo.ascx" %> 

Dann auf dem Code Behing I

ASP.usercontrols_foo newFoo control = (ASP.usercontrols_foo)Page.LoadControl("~/UserControls/Foo.ascx"); 

verwenden, wenn ich auf die Seite, es funktioniert, navigieren, aber wenn ich gehe zu veröffentlichen Die Webseite bekomme ich einen Kompilierfehler.

+0

Baut Ihre Website? – Cerebrus

Antwort

5

Argh, ich blute Entwicklungsstunden auf das gleiche Problem. Hat jemand eine Lösung dafür?

BTW: Es baut, wenn Sie deaktivieren „diese vorkompilierte Website zulassen aktualisierbar sein“ (Rechtsklick auf der Website, wählen Sie Property Pages, MSBuild Option)

Aber ich brauche die Seite aktualisierbar zu sein.

+0

1+, In der Vergangenheit hatte ich das gleiche Problem, da ich es nicht lösen konnte, benutzte ich die Reflexion. Ich würde gerne wissen, wie dieses Problem gelöst werden kann. – Cleiton

0

Möglicherweise hat es etwas damit zu tun, dass der spezifische Typ nicht verfügbar ist. Können Sie die Bedienelemente so die Art ändern und Guss nur die Control-Basisklasse verwenden:

Control control = Page.LoadControl("~/UserControls/Foo.ascx"); 
0

Ja, ich kann es zu gieße zu steuern. Aber dann verliere ich den direkten Zugriff auf die Methoden der Benutzersteuerung.

Ich weiß, dass ich auf die Methoden zugreifen kann, indem ich in das Steuerelement reflektiere, und das habe ich erfolgreich gemacht, aber das ist alles andere als ideal, um auf alle anderen Benutzersteuerelemente auf der Site zuzugreifen.

Auch der Follow-up-Fehler ist, dass es die Benutzersteuerelemente finden kann nicht, dass auf der Auszeichnungs

<%@ Register src="CategoryRows.ascx" tagname="CategoryRows" tagprefix="abc" %> 
<abc:CategoryRows ID="CategoryRows" runat="server" /> 

Bitte beachte, dass ich die Seite erfolgreich sowohl lokal als auch auf dem Server ausgeführt werden kann, wenn ich die gesamte Seite im Wesentlichen XCOPY (Quellcode und alles). Publish schlägt jedoch fehl.

+0

Riaz, Veröffentlichen Sie Ihre Website mit "Feste Benennung und einzelne Seitengruppen verwenden"? – Cleiton

+0

Ich habe versucht, sowohl mit "Feste Benennung und einzelne Seite Baugruppen verwenden" aktiviert und deaktiviert. („Lassen Sie diese vorkompilierte Site aktualisierbar sein“ in beiden Fällen überprüft wird) ich den gleichen Fehler: „Der Typ oder Namespace-Name‚some_user_control_ascx‘existiert nicht im Namensraum‚ASP‘(möglicherweise fehlt eine Montagereferenz ?) " –

2

Ich hatte das gleiche Problem - tatsächlich, in meinem Fall konnte ich es bekommen, um meine Website zu kompilieren und zu bauen, aber es würde spektakulär explodieren, wenn man einen automatisierten Build macht.

Versuchen Sie den Code zu ersetzen, wie folgt:

ASP.usercontrols_foo newFoo control = (ASP.usercontrols_foo)Page.LoadControl("~/UserControls/Foo.ascx"); 

mit

USERCONTROLS_Foo newFoo control = (USERCONTROLS_Foo)Page.LoadControl("~/UserControls/Foo.ascx"); 

(Thesaurierung wird auf der Grundlage, wie Sie Ihre Verzeichnisnamen/Steuer Namen aktiviert - aber in jedem Fall sollte angemessen hervorzuheben) .

0

Das Casting des Benutzersteuerelements kann viele Probleme verursachen. Mein Ansatz besteht darin, eine Klasse (z. B. Steuerklasse) zu erstellen, alle Eigenschaften und Methoden nach dem Umwandeln zu setzen und diese Klasse von System.Web.UI.UserControl zu übernehmen Ihre Benutzer-Cotrol-Code-Datei anstelle von System.Web.UI.UserControl-Benutzer diese Steuerelementklasse.

jetzt, wenn Sie nur Casting-Besetzung mit dieser Klasse benötigen. es wird auch leichter gegossen werden.

+0

Das ist nicht sinnvoll, wenn Sie dynamisch laden müssen. Loading Dynamisch erfordert Page.LoadControl, das nur Control zurückgibt. Wenn überhaupt, müsste ich alle meine Seiten ableiten, um die verschiedenen Benutzersteuerungen zu laden. –

+0

Auch wenn das Steuerelement dynamisch hinzugefügt wird. Wir können das Steuerelement immer auf seine Basisklasse anwenden. '-------------------------- ctrl = Page.LoadControl ("~/DashBoardControl/BroadCastView.ascx") PlaceHolder1.Controls. Add (ctrl) Mit DirectCast (Strg, BraodCastView) Wenn nicht Strg ist nichts dann '----------------------------- -------------------- Hier BraodCastView ist die Basisklasse für BroadCastView.ascx das nie versagt. – ratnesh

1

Ich habe eine Lösung dafür gefunden. Wenn ich Steuerelemente im benutzerdefinierten Namespace deklariere, kann ich Steuerelemente direkt verwenden, ohne ASP zu verwenden oder auf die ASPX-Seite zu verweisen.

0

Bitte überprüfen Sie:

Haben Sie website.publishproj-Datei?
Wenn es existiert, löschen Sie es und versuchen Sie es erneut und veröffentlichen Sie den Code.

Verwandte Themen