2009-03-30 4 views
3

Ich habe eine Webseite sein, die eine TabContainer enthältSys.InvalidOperationException: Handler muss eine Funktion

<%@ Register Assembly="AjaxControlToolkit" Namespace="AjaxControlToolkit" TagPrefix="cc1" %> 
... 
.... 
<form id="form1" runat="server"> 
    <asp:ScriptManager ID="sm1" runat="server"></asp:ScriptManager> 
    <cc1:TabContainer runat="server" ID="tbcTabContainer" OnClientActiveTabChanged="ChangeTab()"></cc1:TabContainer> 
</form> 

, die eine js-Funktion aufruft, die im Moment nichts tut.

In meiner Seite laden in den Code hinter ich ein paar Registerkarten erstellen und sie dem Container hinzufügen. Nun, mein Problem ist, dass, wenn ich Tab ändern, das Javascript-Warnfeld zeigt, aber sobald ich es schließe, erhalte ich den Fehler

Microsoft JScript-Laufzeitfehler: Sys.InvalidOperationException: Handler muss eine Funktion sein.

Antwort

8

Sie müssen die Pars aus dem Attribut entfernen ...

ändern

OnClientActiveTabChanged="ChangeTab()" 

zu

OnClientActiveTabChanged="ChangeTab" 

Nur zur Klarstellung, wenn Sie die Pars fügen Sie eine wörtliche Methodenaufruf während ohne die Parens es eine Referenz auf die Methode ist, funktionieren diese Zuordnungen wie Rückrufe, die einen Delegaten erwarten (Methodenreferenz). Stattdessen ruft es den Methodenaufruf ab und wird bei der ursprünglichen Überprüfung ausgeführt (weil es sich um einen Aufruf handelt) und schlägt dann fehl, wenn versucht wird, ordnungsgemäß aufgerufen zu werden, da es sich um eine tatsächliche Methodenreferenz handelt.

+0

richtig. Immer noch fragen, warum? es ist in Ordnung mit normalen js, um leere paranthesis zu haben, wenn eine Funktion keine Parameter hat – user48408

+0

Ich machte eine Bearbeitung, um eine kleine Info zu geben, warum. –

1

Im Allgemeinen müssen Sie nur den Funktionsnamen angeben, der aufgerufen werden soll. Daher sollte "ChangeTab()" eigentlich nur "ChangeTab" sein.

Auch sollte die Funktion technisch die richtige Signatur implementieren, die zu einem serverseitigen Ereignishandler ähnlich sein würden: ChangeTab (Absender, e) ....

Verwandte Themen