2010-01-15 9 views
14

Ist es möglich, so etwas inline in einer ASPX-Seite zu tun?Kann ich Erweiterungsmethoden inline in einer ASPX-Seite verwenden?

<%= Me.SomeExtensionMethod() %> 

Ich kann nicht scheinen, um herauszufinden, wie dies zu bekommen richtig zu arbeiten. Ich erhalte eine Fehlermeldung, dass "SomeExtensionMethod" kein Mitglied des aktuellen Page-Objekts ist. Ich habe die notwendige <%@ Import Namespace="..." %> Direktive oben auf meiner Seite hinzugefügt. Diese funktioniert in Code-behind.

Dies ist nicht lebenswichtig, aber es wäre gut zu wissen, wie es in der Zukunft geht.

Danke!

Antwort

8

Versuchen Sie, die Seite .aspx zu schließen und wieder zu öffnen, wie in this answer. Wenn das alles verbessert (z. B. intellisense aktivieren), aber es nicht löst, poste bitte alle neuen Fehler, die du bekommst.

Sie könnten auch den Public Modifikator zu Ihrer Module oder class Definition hinzufügen. Wenn Sie Module verwenden, macht es für mich keinen Sinn, dass es erforderlich wäre, aber einige Diskussion auf this forum zeigt an, dass es helfen könnte.

+1

Das hat funktioniert! Wie du macht es für mich keinen Sinn, aber das Hinzufügen des Zugriffsmodifizierers "Public" hat den Trick gemacht. Vielen Dank! – Pwninstein

+0

Arbeitete für mich! Ich musste mein Modul zu einem öffentlichen Bereich ändern und einen Import zu "Namespace.ModuleName" hinzufügen. – EverPresent

+0

Danke - Ich habe die 'import' Anweisung verwendet und es hat funktioniert. – strider

0

Wenn es in dem Code-Behind arbeitet, fügen Sie den Namespace in den Funktionsaufruf:

<%=MyNamespace.ExtensionFcn("hello, world") %> 

Ich würde dies tun, bevor ich die web.config ändern würde.

9

Hinzufügen von Importen im Namespace funktioniert für mich!

<%@ Import Namespace="Foo.FooFoo" %> 
+1

Dies ist die Antwort. Es ist nicht zugänglich, da die Klasse, die die Erweiterungsmethode enthält, nicht automatisch in der für den ASPX generierten Klasse importiert/'verwendet' wird. Das Hinzufügen einer Import/using-Klausel im Code-Behind hilft auch nicht, weil der Code-Behind nur die Basisklasse der ASPX-Klasse ist. – JMD