Элемент управления ASP CascadingDropDown вызывает тайм-аут сценария IE

Перед загрузкой страницы я использую подпрограмму для связывания элементов управления DropDownList вместе:

Private Sub CreateCascadingDropDown(ByVal category As String, ByRef parentDDL As DropDownList, ByRef targetDDL As DropDownList)
            Dim CDDL As New CascadingDropDown
            With CDDL
                .Category = category
                If Not parentDDL Is Nothing Then
                    parentDDL.Items.Clear()
                    .ParentControlID = parentDDL.ID
                End If
                targetDDL.Items.Clear()
                .TargetControlID = targetDDL.ID
                .PromptText = SharedWeb.GC_SELECTONE
                .PromptValue = "-1"
                .LoadingText = "Please wait..."
                .ServicePath = "/ajax/InvestmentProcess.asmx"
                .ServiceMethod = "GetTaxo"
            End With
            'Page.ClientScript.RegisterForEventValidation(CDDL.UniqueID)
            targetDDL.Parent.Controls.Add(CDDL)
        End Sub

Когда вызывается метод веб-службы, он выполняет следующий код. В зависимости от категории он получает соответствующие данные от адаптера.

<WebMethod()> _
    Public Function GetTaxo(ByVal knownCategoryValues As String, ByVal category As String) As CascadingDropDownNameValue()
        Dim log As ILog = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType)
        log.Debug("GetSegmentTaxonomy(" + category + ") -> {" + knownCategoryValues + "}")
        Dim kv As StringDictionary = CascadingDropDown.ParseKnownCategoryValuesString(knownCategoryValues)
        Dim adapter As New SegmentTaxonomyTableAdapters.SEGMENT_ARCHITECTURE_TableAdapter
        Dim rows As DataRowCollection

        Select Case category
            Case InvestmentEdit.ST_SEG_ARCH
                rows = New SegmentTaxonomyTableAdapters.SEGMENT_ARCHITECTURE_TableAdapter().GetData().Rows
            Case InvestmentEdit.ST_LOB
                If kv.ContainsKey(InvestmentEdit.ST_SEG_ARCH) Then
                    log.Debug("found seg architecture - > " + kv(InvestmentEdit.ST_SEG_ARCH))
                    rows = New SegmentTaxonomyTableAdapters.LINE_OF_BUSINESSTableAdapter().GetData(kv(InvestmentEdit.ST_SEG_ARCH)).Rows
                End If
        End Select

        If Not rows Is Nothing Then
            Dim results As New List(Of CascadingDropDownNameValue)
            For Each row As DataRow In rows
                log.Debug("ROW >>>> " + row("lov_label").ToString() + " : " + row("lov_cd").ToString())
                results.Add(New CascadingDropDownNameValue(row("lov_label"), row("lov_cd")))
            Next
            Return results.ToArray
        End If
        Return Nothing
    End Function

Есть около 5 раскрывающихся списков, которые мне нужно связать вместе. Выпадающий элемент управления верхнего уровня (myDDL) загружается нормально, если он единственный, связанный следующим образом:

CreateCascadingDropDown("MyCat",Nothing,myDDL)

Но когда я связываю второй выпадающий элемент управления, Internet Explorer дает тайм-аут сценария. Если я продолжаю разрешать запуск сценария, он просто продолжает выдавать мне подсказку. Если я решу прекратить выполнение сценария, я получу ошибку метода 12031 или ошибку 500 (и да, у меня есть объявление ScriptService() в моем файле веб-службы). Любые идеи о том, что вызывает это?


person Adam    schedule 08.11.2011    source источник


Ответы (1)


Оказывается, мне просто нужно было добавить следующий элемент управления из Ajax Control Toolkit:

<ajax:ToolkitScriptManager ID="tsm" runat="server" />

Вместо .TargetControlID = targetDDL.ID мне нужно было использовать:

.TargetControlID = targetDDL.UniqueId
person Adam    schedule 10.11.2011