J'essaie de créer un contrôle utilisateur simple qui est un curseur. Lorsque j'ajoute un AjaxToolkit SliderExtender au contrôle utilisateur, j'obtiens cette erreur (* & $ # () @ #:
Server Error in '/' Application. The Controls collection cannot be modified because the control contains code blocks (i.e. `<% ... %>`). Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.
Exception Details: System.Web.HttpException: The Controls collection cannot be modified because the control contains code blocks (i.e. `<% ... %>`).
Source Error:
An unhandled exception was generated during the execution of the current web request. Information regarding the origin and location of the exception can be identified using the exception stack trace below.
Stack Trace:
[HttpException (0x80004005): The Controls collection cannot be modified because the control contains code blocks (i.e. `<% ... %>`).] System.Web.UI.ControlCollection.Add(Control child) +8677431 AjaxControlToolkit.ScriptObjectBuilder.RegisterCssReferences(Control control) in d:\E\AjaxTk-AjaxControlToolkit\Release\AjaxControlToolkit\ExtenderBase\ScriptObjectBuilder.cs:293 AjaxControlToolkit.ExtenderControlBase.OnLoad(EventArgs e) in d:\E\AjaxTk-AjaxControlToolkit\Release\AjaxControlToolkit\ExtenderBase\ExtenderControlBase.cs:306 System.Web.UI.Control.LoadRecursive()
+50 System.Web.UI.Control.LoadRecursive()
+141 System.Web.UI.Control.LoadRecursive()
+141 System.Web.UI.Control.LoadRecursive()
+141 System.Web.UI.Control.LoadRecursive()
+141 System.Web.UI.Control.LoadRecursive()
+141 System.Web.UI.Control.LoadRecursive()
+141 System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +627
Version Information: Microsoft .NET Framework Version:2.0.50727.3074; ASP.NET Version:2.0.50727.3074
J'ai essayé de mettre un espace réservé dans le contrôle utilisateur et d'ajouter la zone de texte et l'extension de curseur à l'espace réservé par programme et j'obtiens toujours l'erreur.
Voici le code simple:
<table cellpadding="0" cellspacing="0" style="width:100%">
<tbody>
<tr>
<td></td>
<td>
<asp:Label ID="lblMaxValue" runat="server" Text="Maximum" CssClass="float_right" />
<asp:Label ID="lblMinValue" runat="server" Text="Minimum" />
</td>
</tr>
<tr>
<td style="width:60%;">
<asp:CheckBox ID="chkOn" runat="server" />
<asp:Label ID="lblPrefix" runat="server" />:
<asp:Label ID="lblSliderValue" runat="server" />
<asp:Label ID="lblSuffix" runat="server" />
</td>
<td style="text-align:right;width:40%;">
<asp:TextBox ID="txtSlider" runat="server" Text="50" style="display:none;" />
<ajaxToolkit:SliderExtender ID="seSlider" runat="server"
BehaviorID="seSlider"
TargetControlID="txtSlider"
BoundControlID="lblSliderValue"
Orientation="Horizontal"
EnableHandleAnimation="true"
Length="200"
Minimum="0"
Maximum="100"
Steps="1" />
</td>
</tr>
</tbody>
</table>
Quel est le problème?
c#
asp.net
user-controls
Daniel P
la source
la source
@Daniel P
suggestion.Réponses:
Commencez par démarrer le bloc de code avec <% # au lieu de <% =:
Cela modifie le bloc de code d'un bloc de code Response.Write en une expression de liaison de données.
Étant donné que les
<%# ... %>
expressions de liaison de données ne sont pas des blocs de code, le CLR ne se plaindra pas. Ensuite, dans le code de la page maître, vous ajouteriez ce qui suit:la source
#
au lieu de=
. Je ne comprendrai jamais celui-ci, je le fais depuis des années mais j'aimerais savoir POURQUOI!J'ai également rencontré ce problème, mais j'ai trouvé une autre solution.
J'ai trouvé qu'envelopper les blocs de code avec un asp: PlaceHolder-tag résout le problème.
(Le CMS que j'utilise insère dans la section de tête à partir d'un code derrière lequel m'a empêché d'ajouter des blocs de contrôle personnalisés avec diverses informations comme des méta-balises, etc. c'est donc la seule façon dont cela fonctionne pour moi.)
la source
Controls
ce conteneur. Cela exploite essentiellement ce comportement en plaçant le bloc de code dans un conteneur séparé - donc l'erreur n'apparaîtrait que si vous vouliez modifierControls
lePlaceHolder
, plutôt que le contrôle parent.PlaceHolder
est un excellent choix pour cela, car il n'a pas de code propre (contrairement à, disonsPanel
ou<div runat="server">
). Bien que je l'utilise habituellement dans l'autre sens - mettez les contrôles dont j'ai besoin pour modifierPlaceHolder
.Je peux confirmer que le déplacement du javascript avec des
<% %>
balises de la tête vers la balise de formulaire corrige cette erreurhttp://italez.wordpress.com/2010/06/22/ajaxcontroltoolkit-calendarextender-e-strana-eccezione/
la source
Placez le javascript sous une balise div.
Ça va marcher !!
la source
head
section.vous pouvez faire la même fonctionnalité si vous utilisez le gestionnaire de scripts dans votre page. vous devez simplement enregistrer le script comme celui-ci
la source
ScriptManager
pas ajouter de scripts dans la section head ?J'ai eu le même problème dans le contrôle utilisateur. Ma page qui hébergeait le contrôle avait des commentaires dans la balise head, j'ai supprimé ces commentaires, tout a fonctionné par la suite. Certains articles suggèrent également de supprimer les scripts de la tête et de les placer dans le corps.
la source
J'ai essayé d'utiliser
<%# %>
sans succès. Ensuite, j'ai changéPage.Header.DataBind();
mon code derrière pourthis.Header.DataBind();
et cela a bien fonctionné.la source
Dans mon cas, je l'ai remplacé
<%= %>
par<%# %>
, et ça a marché!la source
Gardez le code du script java à l'intérieur de la balise body
la source
La technique de liaison de données "<% #" ne fonctionnera pas directement à l'intérieur des balises <link> dans la balise <head>:
Le code ci-dessus évaluera
Au lieu de cela, vous devez faire ce qui suit (notez les deux guillemets doubles à l'intérieur):
Et vous obtiendrez le résultat souhaité:
la source
J'ai eu ce problème, mais pas via l'en-tête. Mon espace réservé était dans le corps. Donc , je l' ai remplacé tous les
<%=
avec<%#
et faitet ça a marché.
la source
Une autre manière consiste à avoir une autre page .aspx agissant comme la page à laquelle vous souhaitez créer un lien.
Voici à quoi ressemble l'en-tête de la Masterpage:
Le formulaire .aspx référencé contient votre contenu:
Enfin, vous avez besoin de la page .aspx pour indiquer au navigateur que vous envoyez du contenu CSS:
la source
J'ai également fait face au même problème. J'ai trouvé les solutions comme suit.
Solution 1: J'ai gardé ma balise de script dans le corps.
Désormais, les conflits concernant les balises seront résolus.
Solution 2:
Nous pouvons également résoudre l'une des solutions ci-dessus comme Remplacer le bloc de code par <% # au lieu de <% = Mais le problème est qu'il ne donnera qu'un chemin relatif . Si vous voulez un chemin vraiment absolu, cela ne fonctionnera pas.
La solution 1 fonctionne pour moi. Ensuite, c'est votre choix.
la source
J'ai eu le même problème, mais cela n'avait rien à voir avec JavaScript. Considérez ce code:
Dans cette situation, vous obtiendrez la même erreur même si PlaceHolders n'a aucun bloc de code nuisible, cela se produit en raison du contrôle non serveur hdnTest utilise des blocs de code.
Ajoutez simplement runat = server à hdnTest et le problème est résolu.
la source
J'ai résolu une erreur similaire à celle-ci en mettant l'
<script>
intérieurcontentplaceholder
à l'intérieur du<head>
au lieu de mettre l'<script>
extérieur du ditcontentplaceholder
à l'intérieur du<head>
la source
J'ai eu le même problème avec des circonstances différentes.
J'avais un élément simple à l'intérieur de la balise body.
La solution était:
la source
J'ai eu le même problème avec mon système, j'ai supprimé le code JavaScript de ma page et l'ai mis au corps juste avant de fermer la balise body
la source
Dans certains cas, ResolveUrl et ResolveClientUrl fonctionnent, mais pas toutes les fois en particulier dans le cas de fichiers de script js. Ce qui se passe, c'est que cela fonctionne pour certaines pages, mais lorsque vous accédez à d'autres pages, cela peut ne pas fonctionner en raison du chemin relatif de cette page particulière.
Donc, finalement, ma suggestion est de toujours faire une nouvelle vérification complète des pages de votre site pour savoir si toutes vos références javascript sont correctes ou non. Ouvrez votre site dans Google Chrome -> clic droit sur la page -> cliquez sur afficher la page source -> HTML apparaît -> cliquez maintenant sur vos hyperliens JS; si cela fonctionne bien, il devrait ouvrir le fichier js dans une autre fenêtre du navigateur, sinon il ne s'ouvrira pas.
la source
Essayez d'écrire votre code de script java en dehors de la balise head, cela fonctionnera certainement. Il est résolu lorsque je copie et colle mon code de script Java au bas de la page. Dans le précédent, il est placé dans la balise HEAD maintenant juste avant de fermer la balise de formulaire.
la source
Supprimez la partie qui a des balises de serveur et placez-la ailleurs si vous souhaitez ajouter des contrôles dynamiques à partir du code derrière
J'ai supprimé mon JavaScript de la section de tête de la page et l'ai ajouté au corps de la page et l'ai fait fonctionner
la source
Dans mon cas, j'ai eu cette erreur parce que je définissais à tort InnerText sur une div avec html à l'intérieur.
Exemple:
la source
Les balises
<%= %>
ne fonctionnent pas dans une balise avecrunat="server"
. Déplacez votre code avec<%= %>
dansrunat="server"
une autre balise (body
,head
, ...), ou retirerrunat="server"
du contenant.la source