2010-12-21 10 views
1

Ich versuche, eine Platte als Kind Kontrolle einer anderen Platte in dem Code-Behind einer Master-Seite hinzuzufügen, es ist so einfach wie:Die Controls-Auflistung kann nicht geändert werden, da die Steuercodeblocks enthalten (dh <% ... %>)

Panel1.Controls.Add(Panel2) 

Allerdings, wenn ich versuche, das zu tun, bekomme ich diesen Fehler:

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

Es gibt eine Reihe von Fragen, die etwa mit <% =%> Elementen im Kopfbereich zu sprechen, die ich nicht habe. Ich bin so weit gegangen, um alle <%%> Elemente von dieser Seite zu entfernen, ohne Erfolg, der Fehler tritt noch auf. Kann irgendjemand einen Weg vorschlagen, um dies zum Laufen zu bringen?

+0

Können Sie den Code als Ich sitze auf der XML-Seite? Wie sieht die Panel1-Definition auf der Seite aus? –

Antwort

1

Die "Die Controls-Auflistung kann nicht geändert werden, da das Steuerelement Codeblöcke enthält (d. H. <% ...%>)." Fehler kann sehr ärgerlich sein, um es gelinde auszudrücken. Es ist ein Fehler, den Microsoft nicht beheben kann, da es Problemumgehungen gibt. Es passiert, wenn Sie versuchen, Steuerelemente aus dem Code dahinter zu laden, aber Ihre Seitenquelle Konflikte. Könnte ein paar Dinge los sein ...

Hinweis: Stack Overflow nicht gut Syntax der Codebeispiele gut, so werde ich jede Antwort mit einem Buchstaben verweisen, und in einem späteren Post werde ich versuchen, zu Tippe ein Beispiel aus. Aber ich möchte diesen Beitrag nicht durcheinander bringen, weil ich meine Punkte vermitteln möchte.

A.) Sie haben eine <% Response.Write ("etwas")% in Ihrer Seitenquelle. Oder ein <% CodeBehindMethod()%>. Entferne es und sei kreativ, um es anders zu bevölkern !! Eine Möglichkeit besteht darin, ein ASP.NET-Steuerfeld (wie ein Panel ==> in ein div-Tag umzuwandeln, wenn es in HTML rendert) auf Ihrer Seite zu platzieren und das innere HTML-Attribut dieses Steuerelements dynamisch aufzufüllen. Es gibt andere Möglichkeiten, damit umzugehen.

B.) Sie versuchen, jQuery innerhalb eines Inline-Skriptblocks innerhalb Ihrer Kontrolle zu verwenden, erhalten Sie auch dies. Umgeben Sie den Inline-JavaScript-Codeblock mit einem ASP.NET PlaceHolder-Tag. So einfach ist das. Wenn nicht, funktionieren einige jQuery-Funktionen, aber nicht alle!

C.) Wenn Sie Script Manager ohne Masterpage verwenden, sollten Sie eine Masterpage verwenden, um Probleme später zu vermeiden. Verwenden Sie dann einen ASP.NET ContentPlaceHolder für Ihre Kopf- und Ihre Body-Tags, um das Anpassen von Seiten zu vereinfachen. Wenn Sie Ihre JavaScript-Dateien innerhalb Ihrer Masterpage referenzieren und den Script Manager verwenden, stellen Sie sicher, dass Sie ein Script-Tag in Ihr ScriptManager-Tag einfügen. Platzieren Sie dann innerhalb des Scripts-Tags ein ScriptReference-Tag mit einem Pfad des vollständigen Pfads Ihrer Javascript-Dateien. Stellen Sie sicher, dass Sie am Anfang Ihres Pfades eine Tilda und einen Schrägstrich "~ /" vom Stamm Ihrer Web-App einfügen. Viele setzen ihr ScriptManager-Tag in ihre Kontrolle. Tu das nicht. Platziere es auf deiner Hauptseite! Es macht das Leben leichter.

D.) Wenn A, B oder C Ihre Frage nicht beantwortet haben, würde ich vorschlagen, jedes Stück Ihrer Seite und alle darin enthaltenen Steuerelemente zu entfernen und jedes einzeln hinzuzufügen. Wenn Sie eine riesige Hierarchie der Seiten- und Steuerelementvererbung haben (wenn Ihre Anwendung keine Masterpage hat), viel Glück! Sie werden schließlich herausfinden, was es verursacht hat.

5

* Beispiel für die Antwort B *

=== Code mit Fehler ===

<script type="text/javascript"> 
    jQuery(document).ready(
     function() { 
      alert('Hello!'); 
      jQuery("#<%=TxtSampleId.ClientID %>").focus(); 
     } 
    ); 
</script> 

=== Code ohne Fehler ===

< asp: Platzhalter id = "dontCare" runat = "server">

<script type="text/javascript"> 
    jQuery(document).ready(
     function() { 
      alert('Hello!'); 
      jQuery("#<%=TxtSampleId.ClientID %>").focus(); 
     } 
    ); 
</script> 

</asp: Placeholder>

+0

Großartig! Danke @MacGyver –

0

* Beispiel für Antwort C *

=== Code ohne Fehler ===

MasterpaDE Code:

< DOCTYPE html PUBLIC "- // W3C // DTD XHTML 1.0 Übergang // DE" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> < meta http-equiv = "X- UA-kompatibler "content =" IE = 7" />

< html xmlns = "http://www.w3.org/1999/xhtml">

< title> Stack-Überlauf Beispiel </title>

< Link rel = "stylesheet" type = "text/css" href = "/ style/jquery-ui-1.8.10.custom.css">

< asp: Content id = "Kopf" runat = "server"> < Asp: ContentPlaceHolder>

</head>

< body>

< form id = "Form1" method = "post" runat = "server">

< asp: Scriptmanager ID = "etwas" runat = "server"> < Skripte>
< asp: Script Path = "~/scripts/md5.js" /> < asp: Script Path = "~/scripts/jquery-1.4.4.min.js" /> < asp: ScriptReference Pfad = "~/scripts/jquery-ui-1.8.10.custom.min.js" /> < asp: SkriptReferenz Pfad = "~/custom_crap.js“/> </Scripts> </asp: Script>
< asp: Content id = "body" runat = "server"> </asp: Content>

</form>

</body> </html>

=================================== ================

Seite Quelle:

< asp: Content runat = "server" ID = "headcontent" ContentPlaceHolderID = "Kopf"> .. platzieren Sie Ihre Seite spezifische Header-Dateien hier (js, css, etc ..) </asp: Content>

< asp: Content runat = "server" ID = "Bodycontent" ContentPlaceHolderID = "body"> .. platzieren Sie Ihre Seite spezifische HTML oder ASP.NET-Code hier </asp : Inhalt>

Verwandte Themen