脚本控件不是注册的脚本控件

Nao*_*aor 5 .net asp.net exception-handling scriptmanager

我有一个页面使用CustomerDetails.ascx.它使用CM.ascx.在里面CM.ascx我使用AJAX Data Controls GridView ID="gdvRecommendation".

有时当我浏览页面时,我得到以下异常:

脚本控件'gdvRecommendation'不是注册的脚本控件.在调用RegisterScriptDescriptors()之前,必须使用RegisterScriptControl()注册脚本控件.

参数名称:scriptControl

  1. 我的ScriptManager在内容占位符之前的母版页中定义.
  2. 此异常并不总是发生.
  3. CustomerDetails.ascx在其他页面中使用用户控件,效果很好.

任何人都可以解释我的问题,解决方案是什么?

编辑:
以下是GridView用法CM.ascx:

<td valign="top" style="height: 150px;">
            <div id="divCMMessage"></div>
            <div id='divRecommendation' style="width: 100%; display: inline; overflow: auto;">
                <ADC:GridView ID="gdvRecommendation" Width="100%" runat="server" CellSpacing="0" CellPadding="3" HorizontalAlign="Right" ShowHeader="false" RowDataBoundEvent="onRowDataBound_gdvRecommendation">
                    <RowStyle Height="20px" />
                    <EmptyDataTemplate>no recommendations</EmptyDataTemplate>
                    <EmptyDataRowStyle HorizontalAlign="Right" BorderWidth="0" />
                    <Columns>
                        <ADC:GridViewImageColumn DataImageUrlField="IndImageUrl" HeaderText="" ItemStyle-Width="25px" ItemStyle-HorizontalAlign="Center"></ADC:GridViewImageColumn>
                        <ADC:GridViewTemplateColumn HeaderText="">
                            <ItemTemplate>
                                <asp:Label ID="TreatName" runat="server" Text=""></asp:Label>
                            </ItemTemplate>
                        </ADC:GridViewTemplateColumn>
                        <ADC:GridViewTemplateColumn HeaderText="">
                            <ItemTemplate>
                                <asp:Label ID="TreatType" runat="server" Text=""></asp:Label>
                            </ItemTemplate>
                        </ADC:GridViewTemplateColumn>
                    </Columns>
                </ADC:GridView>
            </div>
        </td>
Run Code Online (Sandbox Code Playgroud)

CustomerDetails.ascx是一个多视图(上MyPage.aspx)的内部.

jhf*_*ric 9

我自己也有类似的问题,这篇文章帮助我理解了我的错误:

脚本控件'ControlName'不是注册的脚本控件

所以你在这里是因为你有以下错误.

  

脚本控件'ControlName'不是注册的脚本控件.在调用RegisterScriptDescriptors()之前,必须使用RegisterScriptControl()注册脚本控件.

参数名称:scriptControl

  

我自己已经在谷歌上做了相当多的谷歌搜索,网上有很多解决方案.不幸的是,这些都是特定于场景的解决方案.有些人得到他们的答案,而其他人,像我一样,没有.

回答:

您正在更改页面生命周期错误阶段的控件的可见性.

描述:

如果要更改控件的可见性,则应始终在PreRender事件期间或之前执行此操作.如果您之后(即在异步任务的End处理程序中或在PreRenderComplete期间)执行此操作,您可能会遇到此问题.

对于诸如按钮或文本框之类的简单控件,这不是问题.但它会对网格等控制产生不利影响.

当我说改变可见性时,它可能是以下任何一种情况

 

  • 在生命周期的早期阶段具有控件的visible = false并在结束处理程序或PreRenderComplete期间更改为visible = true
  • 在结束处理程序或PreRenderComplete期间更改MultiView的选定视图
  • 在页面生命周期的早期阶段可能看不到控件的任何其他情况,这些阶段设置为在后一阶段可见  

原因:

纯粹根据我的理解,如果没有向用户显示,ASP.NET不会呈现与控件相关的脚本或HTML.异常中提到的脚本控件的注册似乎发生在生命周期的早期阶段.如果在此阶段看不到控件,则会跳过该控件的注册.如果它在后一点可见,那么你就可以在没有相关脚本的情况下获得控件.

无论如何这是我所理解的.我可能错了.但是,如果您遇到这个问题,它肯定会帮助您检查哪些控件正在改变生命周期不同点的可见性.您可以通过执行此操作来确定您的具体问题,然后自行提出解决方案.

希望这些信息可以帮助一些人.

资源