Asp.net ResolveClientUrl在runat服务器头内部

Asp.net ResolveClientUrl在runat服务器头内部,asp.net,webforms,runatserver,resolveclienturl,Asp.net,Webforms,Runatserver,Resolveclienturl,我在一个网站上工作。head标记具有runat server attr。在母版页中 我尝试将ResolveClientUrl用于.js文件,如下所示: <head runat="server"> .. <script src='<%= ResolveClientUrl("~/myscript.js") %>' type="text/javascript" > </script> </head> .. 但后来

我在一个网站上工作。head标记具有runat server attr。在母版页中

我尝试将ResolveClientUrl用于.js文件,如下所示:

 <head runat="server">
   .. 
  <script src='<%= ResolveClientUrl("~/myscript.js") %>' type="text/javascript" >    </script>
 </head>

.. 
但后来,我犯了一个错误:

The Controls collection cannot be modified because the control contains code blocks (i.e. <% ... %>). 
无法修改控件集合,因为控件包含代码块(即)。
我发现问题出在runat服务器上,所以我从head标签中删除了它。。。现在我得到了以下错误:

Using themed css files requires a header control on the page. (e.g. <head runat="server" />). 
使用主题化css文件需要在页面上设置标题控件。(例如)。
那么,如何在runat服务器头中使用ResolveClientUrl呢

更新:

我在母版页顶部添加了一个include脚本(看起来很好)。。但也许有更好的解决办法

<!-- #include file="myscript.js" -->

您可以使用数据绑定:

<head ID="head" runat="server">
    ..
    <script src='<%# ResolveClientUrl("~/myscript.js") %>' type="text/javascript" >    </script>
</head>

您可以使用数据绑定:

<head ID="head" runat="server">
    ..
    <script src='<%# ResolveClientUrl("~/myscript.js") %>' type="text/javascript" >    </script>
</head>

您收到该消息的原因是,当引入代码块时,必须锁定包含runat=“server”控件的ControlCollection,以防止核心框架在渲染时无法恢复的意外情况(因此执行渲染代码块)

更复杂的是,当使用任何希望“添加自身”到服务器控件集合中的代码时

为了防止出现这种情况,最好的方法是将任何代码块包装在头部的文字控件中:

<head runat="server">
   <title></title>
   <asp:Literal runat="server" id="SCRIPTLIT1">
    <script src='<%# ResolveClientUrl("~/myscript.js") %>' type="text/javascript"></script>
   </asp:Literal>

<!-- ...other stuff -->
   <asp:ContentPlaceholder runat="server" id="head"></asp:ContentPlaceholder>
</head>


因此,现在我们已经将框架推到锁定文本的控件集合而不是控件集合的位置。

您得到该消息的原因是,当引入代码块时,包含runat=“server”的控件集合控件必须被锁定,以防止出现核心框架在渲染时无法恢复的意外情况(因此执行渲染代码块)

更复杂的是,当使用任何希望“添加自身”到服务器控件集合中的代码时

为了防止出现这种情况,最好的方法是将任何代码块包装在头部的文字控件中:

<head runat="server">
   <title></title>
   <asp:Literal runat="server" id="SCRIPTLIT1">
    <script src='<%# ResolveClientUrl("~/myscript.js") %>' type="text/javascript"></script>
   </asp:Literal>

<!-- ...other stuff -->
   <asp:ContentPlaceholder runat="server" id="head"></asp:ContentPlaceholder>
</head>


因此,现在我们推动框架锁定文本的控件集合,而不是控件集合。

我知道这很旧,但旧的东西似乎总是相关的。这个答案似乎有效,但在某些情况下也会导致“加载viewstate失败”。我知道这很旧,但旧的东西似乎总是相关的。这个答案似乎有效,但在某些情况下也会导致“加载viewstate失败”。