2009-03-30 5 views
3

J'ai une page Web qui contient une TabContainerSys.InvalidOperationException: gestionnaire doit être une fonction

<%@ 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> 

qui appelle une fonction js qui, au moment ne fait rien.

<script type="text/javascript"> 
function ChangeTab() 
{ 
    alert('Sucesss'); 
} 
</script> 

Dans ma page charger dans le code derrière je crée un couple de panneaux à onglets et les ajoute au conteneur. Maintenant, mon problème est que lorsque je change d'onglet, la boîte d'alerte javascript affiche, mais une fois que je l'obtiens l'erreur

Erreur d'exécution de Microsoft JScript: Sys.InvalidOperationException: Handler doit être une fonction.

Répondre

8

Vous devez supprimer les parens de l'attribut ...

changement

OnClientActiveTabChanged="ChangeTab()" 

à

OnClientActiveTabChanged="ChangeTab" 

Juste pour clarifier lorsque vous ajoutez les parens il est un appel de méthode littérale alors que sans les parens c'est une référence à la méthode, ces affectations fonctionnent comme des callbacks qui attendent un délégué (référence de méthode). Au lieu de cela, il obtient appel de méthode et s'exécutera sur eval d'origine (parce qu'il s'agit d'un appel), puis échouera lorsqu'il tentera d'être appelé correctement parce qu'il s'agit d'une référence de méthode réelle.

+0

correcte. Encore à gauche se demandant pourquoi? c'est normal avec js normal d'avoir une parenthèse vide quand une fonction n'a pas de paramètres – user48408

+0

J'ai fait un edit pour fournir un peu d'information quant à pourquoi. –

1

En général, il vous suffit de fournir le nom de fonction à appeler, donc « ChangeTab() » devrait en fait être juste « ChangeTab ».

En outre, la fonction doit mettre en œuvre sur le plan technique la signature proprement dite, qui serait similaire à un gestionnaire d'événements côté serveur: ChangeTab (expéditeur, e) ....

Questions connexes