Próbuję utworzyć prostą kontrolę użytkownika, która jest suwakiem. Gdy dodam AjaxToolkit SliderExtender do kontroli użytkownika, otrzymuję ten błąd (* i $ # () @ #:
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
Próbowałem umieścić symbol zastępczy w formancie użytkownika i programowo dodać pole tekstowe i przedłużacz suwaka do symbolu zastępczego i nadal pojawia się błąd.
Oto prosty kod:
<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>
Jaki jest problem?
c#
asp.net
user-controls
Daniel P.
źródło
źródło
@Daniel P
sugestii.Odpowiedzi:
Najpierw uruchom blok kodu za pomocą <% # zamiast <% =:
Spowoduje to zmianę bloku kodu z bloku kodu Response.Write na wyrażenie wiązania danych.
Ponieważ
<%# ... %>
wyrażenia wiążące dane nie są blokami kodu, CLR nie będzie narzekać. Następnie w kodzie strony wzorcowej dodaj:źródło
#
zamiast=
. Nigdy tego nie zrozumiem, robiłem to od lat, ale chciałbym wiedzieć DLACZEGO!Właśnie natrafiłem na ten problem, ale znalazłem inne rozwiązanie.
Odkryłem, że owijanie bloków kodu asp: Tag PlaceHolder rozwiązuje problem.
(CMS, którego używam, to wstawianie do nagłówka z jakiegoś kodu, za którym nie mogłem dodawać niestandardowych bloków kontrolnych z różnymi informacjami, takimi jak metatagi itp., Więc jest to jedyny sposób, który działa dla mnie.)
źródło
Controls
tego kontenera. To w zasadzie wykorzystuje ten problem poprzez wprowadzenie blok kodu w osobnym pojemniku - więc błąd pokaże tylko jeśli chcesz zmodyfikowaćControls
zPlaceHolder
, zamiast sterowania nadrzędnego.PlaceHolder
jest do tego doskonałym wyborem, ponieważ nie ma własnego kodu (w przeciwieństwie do powiedzPanel
lub<div runat="server">
). Chociaż zwykle używam go na odwrót - umieść elementy sterujące, które muszę zmodyfikowaćPlaceHolder
.Mogę potwierdzić, że przeniesienie javascript z
<% %>
tagami z nagłówka do tagu formularza naprawia ten błądhttp://italez.wordpress.com/2010/06/22/ajaxcontroltoolkit-calendarextender-e-strana-eccezione/
źródło
Umieść javascript pod znacznikiem div.
To zadziała !!
źródło
head
sekcji.możesz wykonać tę samą funkcjonalność, jeśli używasz menedżera skryptów na swojej stronie. musisz tylko zarejestrować skrypt w ten sposób
źródło
ScriptManager
nie dodawać skryptów w sekcji head ?Miałem ten sam problem z kontrolą użytkownika. Moja strona, na której znajdowała się kontrola, miała komentarze w tagu head, usunąłem te komentarze, wszystko działało później. Niektóre posty sugerują również usunięcie skryptów z głowy i umieszczenie ich w ciele.
źródło
Próbowałem używać
<%# %>
bez powodzenia. Potem zmieniłemPage.Header.DataBind();
kod nathis.Header.DataBind();
i działało dobrze.źródło
W moim przypadku, zastąpiły
<%= %>
z<%# %>
, i to działa!źródło
Trzymaj kod skryptu Java w tagu body
źródło
Technika wiązania danych „<% #” nie będzie działać bezpośrednio w znacznikach <link> w znaczniku <head>:
Powyższy kod zostanie oceniony jako
Zamiast tego należy wykonać następujące czynności (zwróć uwagę na dwa podwójne cudzysłowy w środku):
I uzyskasz pożądany wynik:
źródło
Miałem ten problem, ale nie przez nagłówek. Mój symbol zastępczy był w ciele. Więc wymieniłem wszystkie
<%=
z<%#
i zrobiłi zadziałało.
źródło
Alternatywnym sposobem jest, aby inna strona .aspx działała jako strona, do której chcesz utworzyć link.
Tak wygląda nagłówek strony głównej:
Przywoływany formularz .aspx zawiera treść:
Na koniec potrzebujesz strony .aspx, aby poinformować przeglądarkę, że wysyłasz zawartość CSS:
źródło
Zetknąłem się również z tym samym problemem. Znalazłem następujące rozwiązania.
Rozwiązanie 1: Trzymałem znacznik skryptu w ciele.
Teraz konflikty dotyczące tagów zostaną rozwiązane.
Rozwiązanie 2:
Możemy również rozwiązać to jedno z powyższych rozwiązań, takie jak Zastąp blok kodu <% # zamiast <% = Ale problemem jest to, że da tylko względną ścieżkę . Jeśli chcesz naprawdę absolutną ścieżkę, to nie zadziała.
Rozwiązanie 1 działa dla mnie. Następny jest twój wybór.
źródło
Miałem ten sam problem, ale nie miało to nic wspólnego z JavaScript. Rozważ ten kod:
W tej sytuacji pojawi się ten sam błąd, mimo że PlaceHolders nie ma żadnych szkodliwych bloków kodu, dzieje się tak z powodu kontroli innej niż serwer hdnTest używa bloków kodu.
Po prostu dodaj runat = server do hdnTest, a problem zostanie rozwiązany.
źródło
Rozwiązałem błąd podobny do tego, wkładając
<script>
wnętrze docontentplaceholder
środka<head>
zamiast wkładając to,<script>
co powiedziane docontentplaceholder
środka<head>
źródło
Miałem ten sam problem z różnymi okolicznościami.
Miałem prosty element wewnątrz znacznika body.
Rozwiązaniem było:
źródło
Miałem ten sam problem z systemem, usunąłem kod JavaScript ze strony i umieściłem go w treści tuż przed zamknięciem tagu treści
źródło
W niektórych przypadkach ResolveUrl i ResolveClientUrl działa, ale nie zawsze, szczególnie w przypadku plików skryptowych js. To, co się dzieje, działa na niektórych stronach, ale po przejściu do niektórych innych stron może nie działać z powodu względnej ścieżki tej konkretnej strony.
Wreszcie moją propozycją jest zawsze pełne sprawdzenie stron witryny pod kątem tego, czy wszystkie odwołania do javascript są w porządku, czy nie. Otwórz witrynę w Google Chrome -> kliknij stronę prawym przyciskiem myszy -> kliknij wyświetl stronę źródłową -> pojawi się HTML -> teraz kliknij hiperłącza JS; jeśli działa poprawnie, powinien otworzyć plik js w innym oknie przeglądarki, w przeciwnym razie nie zostanie otwarty.
źródło
Spróbuj napisać kod skryptu Java poza tagiem head, który na pewno zadziała. Rozwiązano go, gdy kopiowałem i wklejałem mój kod Java Script na dole strony. W poprzednim miejscu umieszczano go w znaczniku HEAD tuż przed zamknięciem znacznika formularza.
źródło
Usuń część, która ma znaczniki serwera i umieść ją w innym miejscu, jeśli chcesz dodać dynamiczne elementy sterujące z kodu z tyłu
Usunąłem JavaScript z sekcji nagłówka strony, dodałem go do treści strony i uruchomiłem
źródło
W moim przypadku dostałem ten błąd, ponieważ źle ustawiłem InnerText na div z html w nim.
Przykład:
źródło
Tagi
<%= %>
nie działają w tagach zrunat="server"
. Przenieś swój kod z<%= %>
narunat="server"
do innego znacznika (body
,head
...), lub wyjąćrunat="server"
z pojemnika.źródło