2008-09-19 7 views
2

En utilisant ASP.NET 2.0, j'ai une application web où je suis en train d'utiliser JavaScript pour faire un onglet dans un onglet conteneur l'actif languette.Quel est le sens et Correction de l'erreur « La collection Controls ne peut pas ... »

Les recommandations ont été basées sur:

var mX=document.getElementById('<%= tc1.ClientID%>') 

$find('<%= tc1.ClientID%>').set_activeTabIndex(1); 

qui produisent tous les deux l'erreur:

The Controls collection cannot be modified because the control contains code blocks (i.e. <% ... %>). 

J'ai essayé de déplacer le code de l'étiquette de tête et dans la balise body; même erreur.

J'ai aussi essayé le <%# tc1.ClientID%> alternatif, comme dans:

var mX = document.getElementById('<%# tc1.ClientID %>') 

mX.ActiveTabIndex="2"; 

génère une erreur nulle - code ci-dessus est rendu dans le code HTML comme:

var mX = document.getElementById('') 

mX.ActiveTabIndex="2"; 

Quelqu'un peut-il expliquer en clair (er) langage que cela signifie et quelle est la solution?

Répondre

0

Il ressemble et semble que les extraits de code ne sont pas eux-mêmes offensants, mais certains autre code qui modifiait la collection de contrôles est maintenant contrarié à leur sujet. Pouvez-vous dire où dans votre programme l'erreur se produit réellement? Par ailleurs, le <% #%> n'est pas approprié ici — C'est uniquement pour les contrôles liés aux données.

0

Vous ne pouvez pas avoir des blocs de code mélangés avec des contrôles, au lieu de stocker la valeur en javascript et attribuez-lui de cette façon ... quelque chose comme ceci:

<div runat="server" id="rawr"> 
    <span id="myspan">HI</span> 
</div> 
</form> 

<script type="text/javascript"> 
    var obj = '<%= DateTime.Now.ToShortDateString() %>'; 
    var ele = document.getElementById("myspan"); 
    ele.innerHTML = obj; 
</script> 
2

Je l'ai fait courir dans cette avant. Voici est une explication: http://west-wind.com/WebLog/posts/6148.aspx

Par exemple, si votre balisage ressemble à:

<asp:Panel id="whatever" runat="server"> 
    <script type="text/javascript"> 
     var mX=document.getElementById('<%= tc1.ClientID%>'); 
     //and so on... 
    </script> 
</asp:Panel> 

Et si vous essayez d'ajouter un contrôle programatically à ce panneau, il échouera avec l'erreur que vous obtenez .

Une solution est de mettre votre Javascript ailleurs dans la page. Une autre façon (même si un hack) est la suivante:

<asp:Panel id="whatever" runat="server"> 
    <asp:PlaceHolder id="dontCare" runat="server"> 
     <script type="text/javascript"> 
      var mX=document.getElementById('<%= tc1.ClientID%>'); 
      //and so on... 
     </script> 
    </asp:PlaceHolder> 
</asp:Panel> 

Maintenant, la partie <% = ...%> est à l'intérieur du PlaceHolder, pas directement à l'intérieur du panneau. Ajout de contrôles dans votre code C# ou VB au Groupe spécial devrait maintenant fonctionner (même si l'ajout de contrôles à la PlaceHolder échouerait.)

EDIT:
Oui, j'ai essayé d'utiliser <% # ...%> à la place trop , mais seulement pour l'intérieur d'un contrôle DataBound. Par exemple, cela fonctionnerait si c'était au milieu d'un DataGrid et j'ai appelé sa méthode DataBind() ce PostBack.

3

C'est une solution à cette erreur obscure si vous débutez à utiliser ASP.NET MVC.Je laisse cette note ici au cas où une autre personne comme moi a ce problème et je veux vraiment sauver ce gars de perdre des heures de son temps en raison de cette erreur boiteuse:

CHANGER L'EMPLACEMENT DU <SCRIPT> tags! !!

Vous vouliez probablement mettre du javascript sur la page Site.Master mais lorsque vous l'avez fait, vous l'avez fait en dessous des tags lorsque vous avez inclus jQuery. Non monsieur! S'il vous plaît inclure le <script> tag avec le code javascript sur la tête < > et dans le <corps>. Bonne chance!

0

déplacer le javascript de la tête .. et assurez-vous que vous avez ajouté à votre ScriptManager default.aspx tout en utilisant ajaxextenders ..

Questions connexes