将ContentPlaceHolder放在<script>标记</script>中时出现问题

时间:2010-02-02 20:30:18

标签: asp.net javascript visual-studio-2008

我在ASP.Net母版页中有这个:

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

但是当我尝试在设计模式下查看内容页面时,它告诉我相关母版页面中存在错误,因为“scriptContentHolder”不存在。

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

如果我将主页面更改为:

<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控件时会发出嘎嘎声。

3 个答案:

答案 0 :(得分:9)

我遇到了同样的问题并且解决了这个问题:

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

答案 1 :(得分:1)

根据截至2009年5月的this MS Connect帖子,

  

VS设计师不支持控件   在脚本块中。或者,你   能打电话   Page.ClientScriptManager.RegistgerClientScriptBlock   来自内容页面

[原文如此]

所以你必须使用你发布的第二种/解决方法。

答案 2 :(得分: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>

- 在我的.aspx:

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