2011-12-15 23 views
4

我有一個頁面使用CustomerDetails.ascx。它使用CM.ascxCM.ascx我使用AJAX Data Controls GridView與ID="gdvRecommendation"腳本控制不是註冊腳本控件

有時,當我瀏覽的網頁,我得到以下異常:

腳本控制「gdvRecommendation」不是一個註冊的腳本控制。在調用RegisterScriptDescriptors()之前,必須使用RegisterScriptControl()註冊腳本控件。

參數名:ScriptControl的

  1. 我的ScriptManager內容佔位符之前在母版頁中定義。
  2. 這種例外並不總是發生。
  3. 我在其他頁面使用CustomerDetails.ascx用戶控件,它的效果很好。

任何人都可以解釋我的問題,什麼是解決方案?

編輯:
這裏是CM.ascx GridView的用法:

<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> 

CustomerDetails.ascx是一個多視圖(上MyPage.aspx)的內部。

+0

你什麼時候得到這個錯誤信息?當您嘗試添加新控件或嘗試更新控件內容時?是否將控件放置在`UpdatePanel`中? – 2011-12-15 08:57:30

+0

@Venkatarajan Arthanari:我加載MyPage.aspx時得到這個服務器異常。我直接在ascx文件中添加這個用戶控件。我不添加任何更新面板。請參閱編輯。 – Naor 2011-12-15 09:09:48

+1

不確定以下鏈接是否會對您有所幫助,但它看起來像是針對同一問題的解決方案。 http://nwije.blogspot.com/2011/04/script-control-controlname-is-not.html – 2011-12-15 09:15:21

回答

8

我也有類似的問題,我自己和這個職位幫助我理解我的錯誤:

腳本控制「控件名稱」不是一個註冊的腳本控制

,是因爲你有你在這裏以下錯誤。

腳本控制 '控件名稱' 不是一個註冊的腳本控制。在調用RegisterScriptDescriptors()之前,必須使用RegisterScriptControl()註冊腳本控件。

參數名:ScriptControl的

我自己也做了谷歌搜索這個還是比較可觀的,有給遍佈淨多 解決方案。不幸的是,這些都是非常特殊的解決方案。有些人會得到他們的答案,而像我這樣的其他人不會。

答:

您在 頁面生命週期的錯階段改變控制的可見性。

說明:

如果你改變控制的知名度,你應該總是做 這期間,或之前PreRender事件。如果您之後執行此操作(即在 中執行異步任務的結束處理程序或PreRenderComplete期間),則可能會遇到此問題 。

這對於簡單控件(如按鈕或文本框 )不是問題。但它會對網格等控制產生不利影響。

,當我說改變的知名度也可能是的 下列情形

  • 有可見的任何一個=假期間的生命週期和早期控制被改變在結束處理程序或PreRenderComplete期間爲visible = true
  • 在結束處理程序或PreRenderComplete期間更改MultiView的選定視圖
  • 其他任何情況下被設置在後期可見頁面生命週期的早期階段時控制可能不可見

原因:

純 我的理解是,如果不向用戶顯示,ASP.NET不會呈現腳本或與控件相關的HTML 。在例外 中提到的腳本控件的註冊 似乎發生在生命週期的早期階段。如果在此階段控制 不可見,則該註冊將跳過該控制。如果它在後面的位置是可見的,那麼你自己就得到一個沒有相關腳本的控件。

無論如何,這是我所瞭解的。我可能是錯的。但是如果你在這個問題上來到 ,它肯定會幫助你檢查控制 ,這些控件在生命週期的不同階段正在改變能見度。 通過這樣做,您將能夠確定您的具體問題,然後 自行提出解決方案。

希望這些信息有助於某人。

Source

0

我和AJAX有類似的問題,只有在'調試'模式下才有趣。在發佈模式下,一切正常。我還沒有得出結論。 你可能想嘗試一下。

1

我最近面臨同樣的問題,上述方案對我來說沒有奏效。我隱藏了一個控件,然後根據一些條件檢查在PreRender中顯示它。隱藏工作正常,但當我再次使它可見時,它給了我同樣的錯誤。下面

是什麼工作對我來說是─

ScriptManager sm = ScriptManager.GetCurrent(Page); 
sm.RegisterScriptControl(control_name); 

然後製作可見解決了我的問題的控制。

control_name.Visible = true; 

希望它可以幫助某個人面對這個問題。

0

對於RadAjaxPanel並加載UserControls,從jhfelectric中讀取答案,我想出了以下解決方案(簡單的): 禁用加載時的AJAX(Me.EnableAJAX = False)並在PreRender上啓用它。由於PreRender在刪除控件時未被調用,並且在添加控件後調用。