2010-02-02 7 views
2

у меня есть это в ASP.Net Master Page:Проблема размещения ContentPlaceHolder в <script> теги

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

Но когда я пытаюсь просмотреть страницу контента в режиме конструктора он говорит мне, что есть ошибка в соответствующем Master потому что «scriptContentHolder» не существует.

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

Если изменить страницу Master к этому:

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

и содержание страницы для этого:

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

Тогда все круто. Почему это? Страница компилируется и выполняется просто отлично ... но, как и выше, разработчик сквозит при размещении элементов управления ContentPlaceHolder в тегах.

+0

Наблюдение за элементом управления ASP, определенным внутри блока Javascript, заставляет меня съеживаться. > _ < –

ответ

1

Согласно this MS Connect проводке в мае '09 года

VS дизайнер не поддерживает управление внутри блоков сценариев. Кроме того, вы можете позвонить Page.ClientScriptManager.RegistgerClientScriptBlock из страницы содержимого

[так в оригинале]

Таким образом, вы должны будете использовать второй/работу вокруг метода вы размещены.

+0

Или метод «RegisterScriptBlock», упомянутый в цитате. –

9

У меня была такая же проблема, и решить ее так:

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

С этим решением VS не жалуется на недопустимый masterPage: так что спасибо за решение ... однако я вижу кучу текста (команды javascript, которые должны быть невидимыми) в представлении дизайнера ... любым способом решить эту новую небольшую визуальную проблему, вызванную этим решением? – firepol

+0

Мне нравится этот подход для простых сценариев, спасибо! – box86rowh

0

это может быть немного от дорожки. Но у меня был тот же вопрос, потому что я имел некоторый общий код я хотел в моей главной странице, а также другие более специфические только на определенных страницах, вот мое решение:

-В моей .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> 

-In мой .aspx:

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

Это, безусловно, будет работать в большинстве случаев, но в моем случае у меня должен был быть заполнитель содержимого непосредственно в моем javascript $ (document) .ready (function() {}); и, таким образом, прибег к методу @ Ашера выше. – CrowderSoup

Смежные вопросы