Saya mencoba membuat kontrol pengguna sederhana yang merupakan slider. Ketika saya menambahkan AjaxToolkit SliderExtender ke kontrol pengguna saya mendapatkan ini (* & $ # () @ # kesalahan:
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
Saya telah mencoba menempatkan placeholder di kontrol pengguna dan menambahkan textbox dan slider extender ke placeholder secara terprogram dan saya masih mendapatkan kesalahan.
Ini adalah kode sederhana:
<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>
Apa masalahnya?
c#
asp.net
user-controls
Daniel P
sumber
sumber
@Daniel P
saran tersebut.Jawaban:
Pertama, mulai blok kode dengan <% # bukannya <% =:
Ini mengubah blok kode dari blok kode Response.Write ke ekspresi penyatuan data.
Karena
<%# ... %>
penyatuan ekspresi bukan blok kode, CLR tidak akan mengeluh. Kemudian dalam kode untuk halaman master, Anda akan menambahkan yang berikut ini:sumber
#
bukannya=
. Saya tidak akan pernah mengerti yang ini, sudah melakukannya selama bertahun-tahun tetapi berharap saya tahu MENGAPA!Saya hanya mengalami masalah ini juga tetapi menemukan solusi lain.
Saya menemukan bahwa membungkus blok kode dengan asp: PlaceHolder-tag memecahkan masalah.
(CMS yang saya gunakan memasukkan ke bagian-kepala dari beberapa kode di belakang yang membatasi saya untuk menambahkan blok kontrol khusus dengan berbagai informasi seperti meta-tag dll jadi ini adalah satu-satunya cara kerjanya bagi saya.)
sumber
Controls
wadah itu. Ini pada dasarnya memanfaatkan perilaku ini dengan menempatkan blok kode dalam wadah terpisah - sehingga kesalahan hanya akan muncul jika Anda ingin memodifikasiControls
dariPlaceHolder
, daripada kontrol orangtua.PlaceHolder
adalah pilihan yang bagus untuk ini, karena tidak memiliki kode sendiri (tidak seperti, katakanPanel
atau<div runat="server">
). Meskipun saya biasanya menggunakannya sebaliknya - taruh kontrol yang perlu saya modifikasiPlaceHolder
.Saya dapat mengonfirmasi bahwa memindahkan javascript dengan
<% %>
tag dari kepala ke tag bentuk memperbaiki kesalahan inihttp://italez.wordpress.com/2010/06/22/ajaxcontroltoolkit-calendarextender-e-strana-eccezione/
sumber
Tempatkan javascript di bawah tag div.
Itu akan berhasil !!
sumber
head
bagian.Anda dapat melakukan fungsi yang sama jika Anda menggunakan pengelola skrip di halaman Anda. Anda harus mendaftarkan skrip seperti ini
sumber
ScriptManager
tidak dapat menambahkan skrip di bagian kepala ?Saya memiliki masalah yang sama dalam kontrol pengguna. Halaman saya yang menjadi tuan rumah kontrol memiliki komentar di kepala tag, saya menghapus komentar itu, semuanya bekerja setelahnya. Beberapa posting juga menyarankan untuk menghapus skrip dari kepala dan menempatkannya di badan.
sumber
Saya mencoba menggunakan
<%# %>
tanpa hasil. Kemudian saya mengubahPage.Header.DataBind();
kode saya di belakangthis.Header.DataBind();
dan bekerja dengan baik.sumber
Dalam kasus saya, saya telah diganti
<%= %>
dengan<%# %>
, dan itu berhasil!sumber
Simpan kode skrip java di dalam tag tubuh
sumber
Teknik penyatuan data "<% #" tidak akan langsung berfungsi di dalam tag <link> dalam tag <head>:
Kode di atas akan dievaluasi menjadi
Sebagai gantinya, Anda harus melakukan hal berikut (perhatikan dua tanda kutip ganda di dalam):
Dan Anda akan mendapatkan hasil yang diinginkan:
sumber
Saya punya masalah ini, tetapi tidak melalui Header. Pengganti saya ada di tubuh. Jadi saya mengganti semua
<%=
dengan<%#
dan melakukannyadan itu berhasil.
sumber
Cara alternatif adalah memiliki halaman .aspx lain yang berfungsi sebagai halaman yang ingin Anda tautkan.
Beginilah tampilan header Masterpage:
Formulir .aspx yang dirujuk berisi konten Anda:
Terakhir, Anda memerlukan halaman .aspx untuk memberi tahu browser bahwa Anda mengirim konten CSS:
sumber
Saya juga menghadapi masalah yang sama. Saya menemukan solusinya seperti berikut.
Solusi 1: Saya menyimpan tag skrip saya di badan.
Sekarang konflik terkait tag akan diselesaikan.
Solusi 2:
Kita juga dapat memecahkan ini salah satu solusi di atas seperti Ganti blok kode dengan <% # bukannya <% = Tapi masalahnya adalah hanya akan memberikan jalur relatif . Jika Anda ingin benar- benar jalur absolut itu tidak akan berhasil.
Solusi 1 bekerja untuk saya. Berikutnya adalah pilihan Anda.
sumber
Saya memiliki masalah yang sama, tetapi tidak ada hubungannya dengan JavaScript. Pertimbangkan kode ini:
Dalam situasi ini Anda akan mendapatkan kesalahan yang sama walaupun PlaceHolders tidak memiliki blok kode berbahaya, itu terjadi karena kontrol non-server hdnTest menggunakan blok kode.
Cukup tambahkan runat = server ke hdnTest dan masalahnya selesai.
sumber
Saya memecahkan kesalahan yang mirip dengan ini dengan menempatkan bagian
<script>
dalamcontentplaceholder
di dalam<head>
daripada menempatkan bagian<script>
luar katacontentplaceholder
di dalam<head>
sumber
Saya memiliki masalah yang sama dengan keadaan yang berbeda.
Saya memiliki elemen sederhana di dalam tag tubuh.
Solusinya adalah:
sumber
Saya memiliki masalah yang sama dengan sistem saya, saya menghapus kode JavaScript dari halaman saya dan meletakkannya di badan sesaat sebelum menutup tag tubuh
sumber
Untuk beberapa kasus, ResolveUrl dan ResolveClientUrl berfungsi tetapi tidak setiap saat terutama dalam kasus file skrip js. Apa yang terjadi adalah itu berfungsi untuk beberapa halaman tetapi ketika Anda menavigasi ke beberapa halaman lain mungkin tidak berfungsi karena jalur relatif dari halaman tertentu.
Jadi akhirnya saran saya adalah selalu periksa kembali halaman situs Anda untuk mengetahui apakah semua referensi javascript Anda baik-baik saja atau tidak. Buka situs Anda di Google Chrome -> klik kanan pada halaman -> klik lihat halaman sumber -> HTML muncul -> sekarang klik hyperlink JS Anda; jika itu berfungsi dengan baik itu harus membuka file js di jendela browser lain, jika tidak maka tidak akan terbuka.
sumber
Cobalah menulis kode skrip java Anda di luar tag kepala, itu pasti akan berfungsi. Itu diselesaikan ketika saya menyalin dan menempelkan kode Java Script saya ke bagian bawah halaman. Dalam sebelumnya ditempatkan di tag HEAD sekarang tepat sebelum menutup tag formulir.
sumber
Hapus bagian yang memiliki tag server dan letakkan di tempat lain jika Anda ingin menambahkan kontrol dinamis dari kode di belakang
Saya menghapus JavaScript saya dari bagian kepala halaman dan menambahkannya ke badan halaman dan membuatnya berfungsi
sumber
Dalam kasus saya, saya mendapatkan kesalahan ini karena saya salah mengatur InnerText ke div dengan html di dalamnya.
Contoh:
sumber
Tag
<%= %>
tidak berfungsi menjadi tag denganrunat="server"
. Memindahkan kode Anda dengan<%= %>
menjadirunat="server"
ke tag lain (body
,head
, ...), atau menghapusrunat="server"
dari wadah.sumber