2008-12-10 2 views
1

Je veux ajouter un ajax: TabContainer à ma page Web. Je n'obtiens aucune erreur de génération, mais lorsque j'essaie de naviguer vers la page, cela me donne l'erreur suivante: "La collection Controls ne peut pas être modifiée car le contrôle contient des blocs de code (<% ...%>)." .Tentative d'ajout d'ajax TabContainer, obtention d'erreur "La collection Controls ne peut pas être modifiée car le contrôle contient des blocs de code (c'est-à-dire <% ... %>)."

J'ai re-téléchargé Ajax Control Toolkit pour les sites d'exemple, ouvert la solution dans VS, exécuté l'exemple pour TabContainer et cela a fonctionné correctement. Je pensais que c'était peut-être une version différente de l'Ajax Control Toolkit - mais non. Les fichiers AjaxControlToolkit.dll référencés par les deux sites sont identiques. Pourquoi je n'arrive pas à faire fonctionner TabContainer sur mon site?

Il y a un autre problème, mais je ne sais pas si c'est lié. J'ai récemment installé Visual Studio 2008. Dès que j'ai ouvert mon site Web, VS a automatiquement créé l'onglet "AJAX Controls" dans la boîte à outils et l'a rempli de tous les contrôles ajax. Dans le code source, tous les contrôles sont préfixés avec "ajax" - c'est-à-dire, "< ajax: TabContainer runat =" serveur "...>".

Cependant, lorsque j'ai ouvert l'exemple de site Web, Visual Studio a créé un autre onglet dans la boîte à outils - "AjaxControlToolkit Components", rempli avec les mêmes commandes que dans "AJAX Controls". Je ne sais pas pourquoi il a ajouté les mêmes contrôles deux fois (mais, étrangement, avec des icônes différentes pour eux dans la boîte à outils). Dans le code source, toutes les commandes sont préfixées avec "ajaxToolkit" - c'est-à-dire, "< ajaxToolkit: TabContainer runat =" serveur "...>". Que se passe t-il ici? Je veux juste que le bon TabContainer fonctionne sur mon site.

Répondre

6

Vous ne pouvez pas utiliser les blocs <% =%> (écriture) dans un contrôle qui utilise le rendu standard du serveur - vous obtenez cette erreur.

Pour les composants AJAX ASP fonctionne, vous devez:

<head runat="server">... 

Dans le cas contraire, il se bloque avec cette erreur aussi.

Cependant, vous pouvez DataBind l'intérieur de ces contrôles serveur:

<head runat="server"> 
    <link rel="stylesheet" type="text/css" 
     href="<%# ResolveUrl("~/styles/common.aspx") %>" /> 
... 

Et puis dans votre chargement de la page:

Page.Header.DataBind(); 

L'erreur se produit en raison de la façon dont ASP WebForms rendent les contrôles des collections composants - ils peuvent gérer soit la collection (et attendre databind <% #) ou les écritures littérales (et attendre <% =) mais pas les deux ensemble.La meilleure façon d'éviter ce problème de façon permanente est de passer à ASP MVC.

+0

La réponse acceptée a changé, étant donné que vous êtes le premier à répondre correctement à la question. Je vous remercie! Cependant, il n'y a pas besoin pour moi d'apprendre ASP.NET MVC maintenant. J'ai perdu mon travail récemment. Probablement une bonne chose à long terme, je ne supporte plus le développement web. – Cybis

2

Cette erreur n'est pas spécifique à Ajax.

Vous pourriez essayer de placer votre ajax: TabContainer dans un asp: Panel. Vous pouvez également supprimer les blocs de code <% ...%> de votre page.

+0

Il n'y a pas <% %> blocs de code dans ma page! En outre, dans l'exemple de site Web, TabContainer n'était pas dans un groupe de fonctions asp: Panel. – Cybis

1

Je l'ai compris!

Ceci est le message d'erreur que vous obtenez si vous essayez d'utiliser les contrôles AJAX alors que votre <head> contient une balise <script>.

Je viens de déplacer le JavaScript dans le corps, et il semble bien fonctionner maintenant.

+0

WOW MERCI !!! J'ai vraiment, vraiment détesté cette erreur. "La collection Controls ne peut pas être modifiée car le contrôle contient des blocs de code" Qu'est-ce que ça veut dire? " – wallyqs

0

Pragnesh, Vérifiez les balises HEAD pour tout javascript. J'ai eu du javascript avec les blocs de code < %%> qui ont empêché les contrôles des onglets AJAX de fonctionner.

1

Hé les gars, il est à nouveau pas seulement balises javascript, mais quoi que ce soit dans les balises head de votre page qui utilise <% =% > ou <% Response.Write% >. Modifiez votre code pour utiliser la directive de liaison de données <% # eval ( certains codes)% > ou déplacez la substance vers le corps (ceci est également utile pour accélérer le chargement de vos pages).

-1

pas besoin de faire quelque chose juste garder <% = ....%> Une partie du code qui est d'avoir à la page Master en

+0

La réponse n'est pas complète. – BBdev

Questions connexes