“无法修改控件集合”错误

问题描述 投票:0回答:1

我已经为这个错误苦苦挣扎了半天以上,但没有任何建议有帮助,包括 SOF 的 Getting error about control collection ...。我添加此内容是因为我很确定有人会将其标记为“重复”;事实并非如此。

我知道 Ajax AsyncFileUpload 是罪魁祸首,但我知道为什么。当我从页面中删除此控件时,错误就会消失。

我还尝试了所有有关将代码块包装在占位符标记内的建议,但无济于事。此外,所有其他页面都工作正常,这意味着母版页不会出现问题,否则所有页面都会出现问题(我认为!)。

我尝试过:

  • 将标签包裹在占位符中
  • 母版页中没有任何内容带有“<%= %>”
  • 将对 js 文件的所有引用包装在占位符中
  • 将 Page.Header.DataBind() 添加到母版页代码隐藏中。

在主页中:

   <asp:PlaceHolder runat="server>
    <script src='<%# ResolveUrl("path_to_script:) %>'
    ...
   </asp:PlaceHolder>

   <link rel="stylesheet" href="~/assets/css/whatever.css" />

页面显示此错误:

The Controls collection cannot be modified because the control contains code blocks (i.e. <% ... %>).                                
[HttpException (0x80004005): The Controls collection cannot be modified because the control contains code blocks (i.e. <% ... %>).]
   System.Web.UI.ControlCollection.Add(Control child) +11686804
   AjaxControlToolkit.ToolkitResourceManager.RegisterCssReferences(Control control) +893
   System.Web.UI.Control.LoadRecursive() +90
   System.Web.UI.Control.LoadRecursive() +185
   System.Web.UI.Control.LoadRecursive() +185
   System.Web.UI.Control.LoadRecursive() +185
   System.Web.UI.Control.LoadRecursive() +185
   System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +1602

导致此问题的控件是:

<ajaxToolkit:AsyncFileUpload runat="server" ID="fuDBData"
    ClientIDMode="Static"
    class="hidden"
    ThrobberID="myThrobber"
    UploaderStyle="Traditional"
    OnUploadedComplete="fuDBData_UploadedComplete"
    OnUploadedFileError="UploadedFileError"
    onClientUploadStart="uploadStart"
    OnClientUploadComplete="uploadComplete" />
c# ajaxcontroltoolkit
1个回答
0
投票

在抓住救命稻草试图解决这个问题时,我对 site.master 文件进行了更改,似乎已经解决了这个问题。尽管如此,我仍然不明白,其他带有非 Ajax 控件的页面并没有像这个带有 Ajax AsyncFileUpload 的页面那样呕吐。

尽管如此,这个改变解决了我的问题;如果它能帮助一个人摆脱我所患的偏头痛,我会很高兴!

这就是我在 site.master 中的内容:

<head>
    ...
    <script type="text/javascript">
        //Access Code-Behind Data in Javascript
        var Role = "<%#User_Role%>";
        var UserName = "<%#User_Name%>";
        var validRoles = "<%#ValidRoles%>";
        ...
    </script>
</head>

这是我将其更改为:

<head>
    ...
</head>
<body>
    <script type="text/javascript">
        //Access Code-Behind Data in Javascript
        var Role = "<%#User_Role%>";
        var UserName = "<%#User_Name%>";
        var validRoles = "<%#ValidRoles%>";
        ...
    </script>
    <form id="Form1" runat="server">
        ...
    </form>
</body>
© www.soinside.com 2019 - 2024. All rights reserved.