2010-02-02 4 views
2

Je possède ce dans un Maître ASP.Net Page:Problème placer ContentPlaceHolder dans les <script> balises

<script language="javascript" type="text/javascript"> 
     <asp:ContentPlaceHolder ID="scriptContentHolder" runat="server"></asp:ContentPlaceHolder> 
    </script> 

Mais lorsque je tente de voir la page de contenu en mode conception, il me dit qu'il ya une erreur dans le principal associé page car "scriptContentHolder" n'existe pas.

<asp:Content ID="scriptContent" ContentPlaceHolderID="scriptContentHolder" runat="server"> 
    g_page = "mnuSurveys"; 
</asp:Content> 

Si je change la page principale à ceci:

<asp:ContentPlaceHolder ID="scriptContentHolder" runat="server"></asp:ContentPlaceHolder> 

et la page de contenu à ceci:

<asp:Content ID="scriptContent" ContentPlaceHolderID="scriptContentHolder" runat="server"> 
<script language="javascript" type="text/javascript"> 
    g_page = "mnuSurveys"; 
    </script> 
</asp:Content> 

Alors tout est cool. Pourquoi est-ce? La page compile et s'exécute très bien ... mais comme ci-dessus, le concepteur crie quand on place des contrôles ContentPlaceHolder dans les balises.

+0

Voir contrôle ASP défini à l'intérieur d'un bloc Javascript me fait grincer des dents. > _ < –

Répondre

1

Selon this MS Connect affichage de mai '09, le

concepteur VS ne prend pas en charge les contrôles dans les blocs de script. Alternativement, vous pouvez appeler Page.ClientScriptManager.RegistgerClientScriptBlock de la page de contenu

[sic]

vous aurez donc devez utiliser le second/travail autour de la méthode que vous avez publié.

+0

Ou la méthode 'RegisterScriptBlock' mentionnée dans la citation. –

9

J'ai eu le même problème et résolu comme ça:

<%= "<script type=\"text/javascript\">" %>  
    jQuery(document).ready(function() { 
     // On document ready, execute this methods... 
     <asp:ContentPlaceHolder ID="jQueryOnDocReady" runat="server" />     
    }); 
<%= "</script>"%> 
+1

Avec cette solution VS ne se plaint pas d'une masterPage invalide: donc, merci pour la solution ... mais je vois un tas de texte (les commandes javascript, qui devraient être invisibles) dans la vue du concepteur ... de toute façon résoudre aussi ce nouveau petit problème visuel causé par cette solution? – firepol

+0

J'aime cette approche pour des scénarios simples, merci! – box86rowh

0

cela peut être un peu hors piste. Mais je faisais la même question parce que j'avais un code générique que je voulais dans ma page principale, et d'autres plus spécifiques que sur certaines pages, voici ma solution:

-En mon .master:

<script type="text/javascript"> 
    var _gaq = _gaq || []; 
    _gaq.push(['_setAccount', 'UA-XXXXXX-X']); 
    _gaq.push(['_trackPageview']); 
</script> 

<asp:ContentPlaceHolder ID="PerPageScript" runat="server"> 
</asp:ContentPlaceHolder> 

-Dans mon .aspx:

<asp:Content ID="Content1" ContentPlaceHolderID="PerPageScript" runat="server"> 
    <script type="text/javascript"> 
    ... 
    </script> 
</asp:Content> 
+0

Cela fonctionnerait certainement dans la plupart des cas, mais dans mon cas, je devais avoir un espace réservé content directement dans mon javascript $ (document) .ready (function() {}); fonction, et a donc eu recours à la méthode de @ Ascher ci-dessus. – CrowderSoup

Questions connexes