2009-01-13 7 views
7

Ich habe eine C# -Webanwendung, die in Visual Studio 2008 erstellt wird, wo wir uns stark auf Benutzersteuerelemente für vordefinierte Blöcke von ASP.NET verlassen.Visual Studio 2008-Benutzersteuerelemente, die in der web.config registriert sind, registrieren nicht mit Intellisense

Anstatt einen großen Stapel von Benutzersteuerelementen auf jeder Seite zu registrieren, registrieren wir alle Steuerelemente in einer lokalen (zu einem bestimmten Ordner) web.config-Datei. Der Vorteil ist, dass wir die Steuerelemente verwenden können und die Seiten in der Quellansicht "sauberer" aussehen. Weder die VS2008-Entwurfsansicht noch Intellisense erkennen jedoch, dass die Steuerelemente in web.config registriert sind. Die Anwendung selbst funktioniert jedoch wie erwartet.


normalerweise am oberen Rand jeder Seite würden wir ein Tag wie dieses:

<%@ Register src="~/CommonControls/Foo.ascx" tagname="Foo" tagprefix="Bar" %> 

Und wir registrieren die Steuerelemente in einem lokalen web.config wie folgt:

<?xml version="1.0"?> 
<configuration> 
    <system.web> 
     <pages> 
      <controls> 
       <add src="~/CommonControls/Foo.ascx" tagName="Foo" tagPrefix="Bar"/> 
      </controls> 
     </pages> 
    </system.web> 
</configuration> 

Kennt jemand eine Fehlerbehebung, damit Intellisense diese benutzerdefinierten Steuerelemente erkennt? Oder gibt es einen "besseren" Weg, dies zu tun?

+0

Ich könnte falsch sein, aber ich dachte, dass Web Application Projects (vor allem mit VS2008 SP1) Intellisense zur Verfügung stellen wird, ohne den <% @ Register ... Tag. –

Antwort

2

Während dies in einer lokalen Web.Config-Datei nicht funktioniert, können Sie das Location-Tag in Ihrer root web.config-Datei verwenden, um das gleiche Ergebnis zu erzielen.

Zum Beispiel:

<?xml version="1.0"?> 
<configuration> 
    <location path="MyPath"> 
     <system.web> 
      <pages> 
       <controls> 
        <add src="~/CommonControls/Foo.ascx" tagName="Foo" tagPrefix="Bar"/> 
       </controls> 
      </pages> 
     </system.web> 
    </location> 
</configuration> 
1

Es hat wahrscheinlich damit zu tun, dass es nicht in der Hauptdatei web.config registriert ist. Testen Sie es, indem Sie eine oder zwei Referenzen in die Hauptdatei web.config einfügen.

+0

Hallo dort. Danke für Ihre Antwort. Ja, es funktioniert in der Hauptsache web.config, aber ich habe erwartet, dass dies in der lokalen web.config funktioniert. Sicher ist das erwartetes Verhalten. Irgendwelche Ideen? Mike –

0

Könnte es sein, dass Sie das Steuerelement zweimal registrieren und intellisense die Referenz nicht auflösen kann?

Ich würde exepect, dass das Steuerelement

+0

Hallo Blatfrig. Danke für Ihren Vorschlag. Die Frage ist etwas zweideutig. Um es zu verdeutlichen: Wir haben es nicht zweimal registriert, die beiden obigen Codefragmente waren Alternativen, die funktionieren sollten. Ich stimme zu, sie zusammen zu tun, würde Verwirrung stiften! - Mike –

1

Ich habe versucht, Ihre Beispielcode und Intellisense funktioniert in beide Blick auf die aspx Seite der Code entweder in einer Konfigurationsdatei oder in der Seitendirektive registriert werden und der Code-behind-Seite. Sie können die Klassennamen Ihrer Benutzersteuerelemente überprüfen, Visual Studio enthält standardmäßig den Ordnernamen im Klassennamen. So könnte Ihr Steuerelement CommonControls_Foo statt Foo benannt werden, wie Sie erwarten würden.

In beiden Fällen hat die Datei web.config nichts mit dem Intellisense des Codes zu tun. Überprüfen Sie den Namen und den Namespace der Klasse.

Verwandte Themen