2011-10-17 22 views
1

sys.invalidoperationexception:控件已經與元素相關聯。我正在使用DotNetNuke 5.6.3。如果我點擊編輯,就會發生錯誤。我知道它與AJAX和腳本管理器有關,但是我不能在DotNetNekt中沒有這個錯誤的情況下運行它。sys.invalidoperationexception:控件已經與元素相關聯。在DotNetNuke中使用Telerik Controls

這裏是我的代碼:

<%@ Control language="C#" Inherits="my.Modules.ImageRotator.EditImageRotator" CodeFile="EditImageRotator.ascx.cs" AutoEventWireup="true"%> 
<%@ Register TagPrefix="dnn" TagName="Label" Src="~/controls/LabelControl.ascx" %> 
<%@ Register TagPrefix="dnn" TagName="TextEditor" Src="~/controls/TextEditor.ascx" %> 
<%@ Register TagPrefix="dnn" TagName="Audit" Src="~/controls/ModuleAuditControl.ascx" %> 
<%@ Register TagPrefix="telerik" Namespace="Telerik.Web.UI" Assembly="Telerik.Web.UI" %> 



<ContentTemplate> 
    <telerik:RadGrid ID="RadGrid1" runat="server" AllowPaging="True" 
     AllowSorting="True" AutoGenerateDeleteColumn="True" 
     AutoGenerateEditColumn="True" CausesValidation="False" CellSpacing="0" 
     DataSourceID="SqlDataSource1" GridLines="None" RegisterWithScriptManager="true" 
     Skin="WebBlue"> 
     <ClientSettings AllowColumnsReorder="True" ReorderColumnsOnClient="True"> 
     <Selecting AllowRowSelect="True" /> 
     </ClientSettings> 
     <MasterTableView AutoGenerateColumns="False" DataKeyNames="ItemID" 
     DataSourceID="SqlDataSource1"> 
     <CommandItemSettings ExportToPdfText="Export to PDF" /> 
     <RowIndicatorColumn FilterControlAltText="Filter RowIndicator column"> 
     </RowIndicatorColumn> 
     <ExpandCollapseColumn FilterControlAltText="Filter ExpandColumn column"> 
     </ExpandCollapseColumn> 
     <Columns> 
      <telerik:GridBoundColumn DataField="ModuleID" DataType="System.Int32" 
      FilterControlAltText="Filter ModuleID column" HeaderText="ModuleID" 
      SortExpression="ModuleID" UniqueName="ModuleID"> 
      </telerik:GridBoundColumn> 
      <telerik:GridBoundColumn DataField="ItemID" DataType="System.Int32" 
      FilterControlAltText="Filter ItemID column" HeaderText="ItemID" ReadOnly="True" 
      SortExpression="ItemID" UniqueName="ItemID"> 
      </telerik:GridBoundColumn> 
      <telerik:GridBoundColumn DataField="Content" 
      FilterControlAltText="Filter Content column" HeaderText="Content" 
      SortExpression="Content" UniqueName="Content"> 
      </telerik:GridBoundColumn> 
      <telerik:GridBoundColumn DataField="CreatedByUser" DataType="System.Int32" 
      FilterControlAltText="Filter CreatedByUser column" HeaderText="CreatedByUser" 
      SortExpression="CreatedByUser" UniqueName="CreatedByUser"> 
      </telerik:GridBoundColumn> 
      <telerik:GridBoundColumn DataField="CreatedDate" DataType="System.DateTime" 
      FilterControlAltText="Filter CreatedDate column" HeaderText="CreatedDate" 
      SortExpression="CreatedDate" UniqueName="CreatedDate"> 
      </telerik:GridBoundColumn> 
      <telerik:GridBoundColumn DataField="Link" 
      FilterControlAltText="Filter Link column" HeaderText="Link" 
      SortExpression="Link" UniqueName="Link"> 
      </telerik:GridBoundColumn> 
      <telerik:GridBoundColumn DataField="SortOrder" DataType="System.Int32" 
      FilterControlAltText="Filter SortOrder column" HeaderText="SortOrder" 
      SortExpression="SortOrder" UniqueName="SortOrder"> 
      </telerik:GridBoundColumn> 
     </Columns> 
     <EditFormSettings> 
      <EditColumn FilterControlAltText="Filter EditCommandColumn column"> 
      </EditColumn> 
     </EditFormSettings> 
     </MasterTableView> 
     <FilterMenu EnableImageSprites="False"> 
     </FilterMenu> 
     <HeaderContextMenu CssClass="GridContextMenu GridContextMenu_Default"> 
     </HeaderContextMenu> 
    </telerik:RadGrid> 
    </ContentTemplate> 
    <br /> 
     <asp:linkbutton cssclass="CommandButton" id="cmdUpdate" OnClick="cmdUpdate_Click" resourcekey="cmdUpdate" runat="server" borderstyle="none" text="Update" CausesValidation="False"></asp:linkbutton>&nbsp; 
    <asp:linkbutton cssclass="CommandButton" id="cmdCancel" OnClick="cmdCancel_Click" resourcekey="cmdCancel" runat="server" borderstyle="none" text="Cancel" causesvalidation="False"></asp:linkbutton>&nbsp; 
    <asp:linkbutton cssclass="CommandButton" id="cmdDelete" OnClick="cmdDelete_Click" resourcekey="cmdDelete" runat="server" borderstyle="none" text="Delete" causesvalidation="False"></asp:linkbutton>&nbsp; 
</div> 

    <dnn:audit id="ctlAudit" runat="server" /> 

    <asp:SqlDataSource ID="SqlDataSource1" runat="server" 
      ConnectionString="<%$ ConnectionStrings:ImageRotatorConnectionString %>" 
      SelectCommand="SELECT * FROM [ImageRotator]"></asp:SqlDataSource> 
+0

你的代碼背後是什麼樣的? –

+0

沒有空的page_load –

回答

1

OK,這裏是解決方案。我需要替換默認的腳本管理器。在DotNetNuke.Library謨DNN的核心5.6.3,我做了如下修改AJAX.VB:

在第46行:

Using objScriptManager As Telerik.Web.UI.RadScriptManager = New Telerik.Web.UI.RadScriptManager() With {.ID = "ScriptManager", .EnableScriptGlobalization = True} 

整個文件現在看起來是這樣,一旦我完成編輯我重新編譯並將我的新dll添加到我的項目中:

' 
' DotNetNuke® - http://www.dotnetnuke.com 
' Copyright (c) 2002-2010 
' by DotNetNuke Corporation 
' 
' Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated 
' documentation files (the "Software"), to deal in the Software without restriction, including without limitation 
' the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and 
' to permit persons to whom the Software is furnished to do so, subject to the following conditions: 
' 
' The above copyright notice and this permission notice shall be included in all copies or substantial portions 
' of the Software. 
' 
' THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED 
' TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 
' THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF 
' CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 
' DEALINGS IN THE SOFTWARE. 
' 

Imports System.Web.Compilation 
Imports System.Reflection 
Imports System.Xml 
Imports System.Xml.XPath 
Imports DotNetNuke.Entities.Host 

Namespace DotNetNuke.Framework 

    Public Class AJAX 

#Region "Public Methods" 

     ''' ----------------------------------------------------------------------------- 
     ''' <summary> 
     ''' AddScriptManager is used internally by the framework to add a ScriptManager control to the page 
     ''' </summary> 
     ''' <remarks> 
     ''' </remarks> 
     ''' <history> 
     ''' </history> 
     ''' ----------------------------------------------------------------------------- 
     Public Shared Sub AddScriptManager(ByVal objPage As Page) 
      If GetScriptManager(objPage) Is Nothing Then 
     Using objScriptManager As Telerik.Web.UI.RadScriptManager = New Telerik.Web.UI.RadScriptManager() With {.ID = "ScriptManager", .EnableScriptGlobalization = True} 
      If objPage.Form IsNot Nothing Then 
      Try 
       objPage.Form.Controls.AddAt(0, objScriptManager) 
      Catch ex As HttpException 
       'suppress error adding script manager to support edge-case of module developers custom aspx pages that inherit from basepage and use code blocks 
      End Try 
      If HttpContext.Current.Items("System.Web.UI.ScriptManager") Is Nothing Then 
       HttpContext.Current.Items.Add("System.Web.UI.ScriptManager", True) 
      End If 
      End If 
     End Using 
      End If 
     End Sub 

     Public Shared Function GetScriptManager(ByVal objPage As Page) As ScriptManager 
      Return TryCast(objPage.FindControl("ScriptManager"), ScriptManager) 
     End Function 

     ''' ----------------------------------------------------------------------------- 
     ''' <summary> 
     ''' IsEnabled can be used to determine if AJAX has been enabled already as we 
     ''' only need one Script Manager per page. 
     ''' </summary> 
     ''' <remarks> 
     ''' </remarks> 
     ''' <history> 
     ''' </history> 
     ''' ----------------------------------------------------------------------------- 
     Public Shared Function IsEnabled() As Boolean 
      If HttpContext.Current.Items("System.Web.UI.ScriptManager") Is Nothing Then 
       Return False 
      Else 
       Return CType(HttpContext.Current.Items("System.Web.UI.ScriptManager"), Boolean) 
      End If 
     End Function 

     ''' ----------------------------------------------------------------------------- 
     ''' <summary> 
     ''' IsInstalled can be used to determine if AJAX is installed on the server 
     ''' </summary> 
     ''' <remarks> 
     ''' </remarks> 
     ''' <history> 
     ''' </history> 
     ''' ----------------------------------------------------------------------------- 
     Public Shared Function IsInstalled() As Boolean 
      Return True 
     End Function 

     ''' ----------------------------------------------------------------------------- 
     ''' <summary> 
     ''' Allows a control to be excluded from UpdatePanel async callback 
     ''' </summary> 
     ''' <remarks> 
     ''' </remarks> 
     ''' <history> 
     ''' </history> 
     ''' ----------------------------------------------------------------------------- 
     Public Shared Sub RegisterPostBackControl(ByVal objControl As Control) 
      Dim objScriptManager As ScriptManager = GetScriptManager(objControl.Page) 
      If objScriptManager IsNot Nothing Then 
       objScriptManager.RegisterPostBackControl(objControl) 
      End If 
     End Sub 

     ''' ----------------------------------------------------------------------------- 
     ''' <summary> 
     ''' RegisterScriptManager must be used by developers to instruct the framework that AJAX is required on the page 
     ''' </summary> 
     ''' <remarks> 
     ''' </remarks> 
     ''' <history> 
     ''' </history> 
     ''' ----------------------------------------------------------------------------- 
     Public Shared Sub RegisterScriptManager() 
      If Not IsEnabled() Then 
       HttpContext.Current.Items.Add("System.Web.UI.ScriptManager", True) 
      End If 
     End Sub 

     ''' ----------------------------------------------------------------------------- 
     ''' <summary> 
     ''' RemoveScriptManager will remove the ScriptManager control during Page Render if the RegisterScriptManager has not been called 
     ''' </summary> 
     ''' <remarks> 
     ''' </remarks> 
     ''' <history> 
     ''' </history> 
     ''' ----------------------------------------------------------------------------- 
     Public Shared Sub RemoveScriptManager(ByVal objPage As Page) 
      If IsEnabled() = False Then 
       Dim objControl As Control = objPage.FindControl("ScriptManager") 
       If Not objControl Is Nothing Then 
        objPage.Form.Controls.Remove(objControl) 
       End If 
      End If 
     End Sub 

     ''' ----------------------------------------------------------------------------- 
     ''' <summary> 
     ''' Wraps a control in an update panel 
     ''' </summary> 
     ''' <remarks> 
     ''' </remarks> 
     ''' <history> 
     ''' </history> 
     ''' ----------------------------------------------------------------------------- 
     Public Shared Function WrapUpdatePanelControl(ByVal objControl As Control, ByVal blnIncludeProgress As Boolean) As Control 
      Dim updatePanel As New UpdatePanel() 
      updatePanel.ID = objControl.ID & "_UP" 
      updatePanel.UpdateMode = UpdatePanelUpdateMode.Conditional 

      Dim objContentTemplateContainer As Control = updatePanel.ContentTemplateContainer 

      For i As Integer = 0 To objControl.Parent.Controls.Count - 1 'find offset of original control 
       If objControl.Parent.Controls(i).ID = objControl.ID Then 'if ID matches 
        objControl.Parent.Controls.AddAt(i, updatePanel)  'insert update panel in that position 
        objContentTemplateContainer.Controls.Add(objControl) 'inject passed in control into update panel 
        Exit For 
       End If 
      Next 

      If blnIncludeProgress Then 
       'create image for update progress control 
       Dim objImage As System.Web.UI.WebControls.Image = New System.Web.UI.WebControls.Image() 
       objImage.ImageUrl = "~/images/progressbar.gif" 'hardcoded 
       objImage.AlternateText = "ProgressBar" 

       Dim updateProgress As New UpdateProgress 
       updateProgress.AssociatedUpdatePanelID = updatePanel.ID 
       updateProgress.ID = updatePanel.ID + "_Prog" 
       updateProgress.ProgressTemplate = New UI.WebControls.LiteralTemplate(objImage) 

       objContentTemplateContainer.Controls.Add(updateProgress) 
      End If 

      Return updatePanel 
     End Function 

#End Region 

#Region "Obsolete Methods" 

     <Obsolete("Deprecated in DNN 5.4, Developers can work directly with the UpdatePanel")> _ 
     Public Shared Function ContentTemplateContainerControl(ByVal objUpdatePanel As Object) As Control 
      Return TryCast(objUpdatePanel, UpdatePanel).ContentTemplateContainer 
     End Function 

     <Obsolete("Deprecated in DNN 5.4, MS AJax is now required for DotNetNuke 5.0. Develoers can create the control directly")> _ 
     Public Shared Function CreateUpdatePanelControl() As Control 
      Dim updatePanel As New UpdatePanel() 
      updatePanel.UpdateMode = UpdatePanelUpdateMode.Conditional 
      Return updatePanel 
     End Function 

     <Obsolete("Deprecated in DNN 5.4, MS AJax is now required for DotNetNuke 5.0. Developers can work directly with the UpdateProgress")> _ 
     Public Shared Function CreateUpdateProgressControl(ByVal AssociatedUpdatePanelID As String) As Control 
      Dim updateProgress As New UpdateProgress 
      updateProgress.ID = AssociatedUpdatePanelID + "_Prog" 
      updateProgress.AssociatedUpdatePanelID = AssociatedUpdatePanelID 
      Return updateProgress 
     End Function 

     <Obsolete("Deprecated in DNN 5.4, MS AJax is now required for DotNetNuke 5.0. Developers can work directly with the UpdateProgress")> _ 
     Public Shared Function CreateUpdateProgressControl(ByVal AssociatedUpdatePanelID As String, ByVal ProgressHTML As String) As Control 
      Dim updateProgress As New UpdateProgress 
      updateProgress.ID = AssociatedUpdatePanelID + "_Prog" 
      updateProgress.AssociatedUpdatePanelID = AssociatedUpdatePanelID 
      updateProgress.ProgressTemplate = New UI.WebControls.LiteralTemplate(ProgressHTML) 
      Return updateProgress 
     End Function 

     <Obsolete("Deprecated in DNN 5.4, MS AJax is now required for DotNetNuke 5.0. Developers can work directly with the UpdateProgress")> _ 
     Public Shared Function CreateUpdateProgressControl(ByVal AssociatedUpdatePanelID As String, ByVal ProgressControl As Control) As Control 
      Dim updateProgress As New UpdateProgress 
      updateProgress.ID = AssociatedUpdatePanelID + "_Prog" 
      updateProgress.AssociatedUpdatePanelID = AssociatedUpdatePanelID 
      updateProgress.ProgressTemplate = New UI.WebControls.LiteralTemplate(ProgressControl) 
      Return updateProgress 
     End Function 

     <Obsolete("Deprecated in DNN 5.0, MS AJax is now required for DotNetNuke 5.0 and above - value no longer read from Host.EnableAjax")> _ 
     Public Shared Function IsHostEnabled() As Boolean 
      Return True 
     End Function 

     <Obsolete("Deprecated in DNN 5.4, Replaced by GetScriptManager")> _ 
     Public Shared Function ScriptManagerControl(ByVal objPage As Page) As Control 
      Return objPage.FindControl("ScriptManager") 
     End Function 

     <Obsolete("Deprecated in DNN 5.4, Developers can work directly with the ScriptManager")> _ 
     Public Shared Sub SetScriptManagerProperty(ByVal objPage As Page, ByVal PropertyName As String, ByVal Args() As Object) 
      Dim scriptManager As ScriptManager = GetScriptManager(objPage) 
      If scriptManager IsNot Nothing Then 
       Reflection.SetProperty(scriptManager.GetType(), PropertyName, scriptManager, Args) 
      End If 
     End Sub 

#End Region 

    End Class 
End Namespace 
相關問題