4

我被这个错误困住了,找到了解决方法,解决方案对我有用,但我想知道这是解决问题的最佳方法,我想确保它不会严重影响任何其他页面。希望高手帮忙。如果这是最好的解决方案,那么你们中的许多人可以省心。

将代码块放置在 MasterPage 中时会发生此错误。将代码块放在占位符中以解决问题。将 AJAX 扩展器添加到您的网页时,它将尝试在头部注册脚本。如果 MasterPage 中存在代码块,则可能会发生错误。

要解决此问题,只需将代码块移动到 MasterPage 头部的占位符中,如下所示:

<head id="Head1" runat="server">
    <title>Untitled Page</title>
    <link href="StyleSheet.css" rel="stylesheet" type="text/css" />
    <asp:ContentPlaceHolder ID="myPlaceholder" runat="server">
    <script language="javascript" type="text/javascript" src="<%= Page.ResolveClientURL("~/javascript/global.js")%>"></script>
    </asp:ContentPlaceHolder>
    <asp:ContentPlaceHolder ID="head" runat="server"></asp:ContentPlaceHolder>
</head>
4

2 回答 2

3

该错误是合乎逻辑的,您不能在使用渲染后混淆渲染的控件<%= %>

解决此问题的一种方法是使用文字控件,并将脚本行呈现在代码后面。

<asp:ContentPlaceHolder ID="myPlaceholder" runat="server">
    <asp:Literal runat="server" ID="txtIncludeScript" EnableViewState="false"></asp:Literal>
</asp:ContentPlaceHolder>

和后面的代码。检查 null 因为如果您更改占位符,则文字为 null。还要设置 EnableViewState=false,因为您在每个 Page_Load 上都设置了它,并且您不希望将其保存到视图状态。

  if(txtIncludeScript != null)
  {
    txtIncludeScript.Text = 
string.Format("<script language=\"javascript\" type=\"text/javascript\" src=\"{0}\"></script>",   
Page.ResolveClientUrl("~/javascript/global.js"));
  }
于 2011-07-21T10:51:07.443 回答
0

ContentPlaceHolder 需要一个母版页,因此您可以将该标记替换为可以在服务器上运行的其他元素,以防您的页面没有母版页并且您无法摆脱

<head id="Head1" runat="server">
 <title>Untitled Page</title>
 <link href="StyleSheet.css" rel="stylesheet" type="text/css" />
 <div runat="server">
  <script language="javascript" type="text/javascript" src="<%= Page.ResolveClientURL("~/javascript/global.js")%>"></script>
 </div>
 <asp:ContentPlaceHolder ID="head" runat="server"></asp:ContentPlaceHolder>
</head>
于 2012-04-16T19:59:15.380 回答