0

頁面加載之前,我用一個子程序鏈接DropDownList控件一起:ASP CascadingDropDown控件導致IE腳本超時

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 

當Web服務方法被調用時,它執行下面的代碼。根據類別,它從適配器獲取適當的數據。

<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(是的,我的Web服務文件中有ScriptService()聲明)。任何想法是什麼導致這個?

回答

0

原來我只是需要加入從Ajax控件工具包以下控制:

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

相反.TargetControlID = targetDDL.ID的我需要使用:

.TargetControlID = targetDDL.UniqueId