2013-07-10 81 views
0

我正在按照教程here嘗試使用VS2012中的AJAX工具包實現級聯下拉列表,但是,我將MySQL用作我的數據庫。我創建了一個Web服務(如本教程介紹 - 如下圖所示),沒有填充AJAX級聯下拉列表

<WebMethod()> 
Public Function GetComplex(ByVal knownCategoryValues As String, ByVal category As String) As CascadingDropDownNameValue() 
    Dim conn As New MySqlConnection("Server=localhost; database=lockout; User ID=root; Pwd=123let?") 
    conn.Open() 
    Dim comm As New MySqlCommand("SELECT complex_id, complex_name FROM complex ORDER BY complex_name", conn) 
    Dim dr As MySqlDataReader = comm.ExecuteReader() 
    Dim l As New List(Of CascadingDropDownNameValue) 
    While (dr.Read()) 
     l.Add(New CascadingDropDownNameValue(dr("complex_name").ToString(), dr("complex_id").ToString())) 
    End While 
    conn.Close() 
    Return l.ToArray() 
End Function 

,我能夠連接到我的數據庫,並調用我的功能。調用該函數返回在網頁瀏覽器的情況如下:

<ArrayOfCascadingDropDownNameValue xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://tempuri.org/"> 
<CascadingDropDownNameValue> 
    <name>14 Line</name> 
    <value>1</value> 
    <isDefaultValue>false</isDefaultValue> 
</CascadingDropDownNameValue> 
<CascadingDropDownNameValue> 
    <name>16 Line</name> 
    <value>2</value> 
    <isDefaultValue>false</isDefaultValue> 
</CascadingDropDownNameValue> 
<CascadingDropDownNameValue> 
    <name>Converting</name> 
    <value>3</value> 
    <isDefaultValue>false</isDefaultValue> 
</CascadingDropDownNameValue> 
<CascadingDropDownNameValue> 
    <name>F&E</name> 
    <value>4</value> 
    <isDefaultValue>false</isDefaultValue> 
</CascadingDropDownNameValue> 
<CascadingDropDownNameValue> 
    <name>Water Quality</name> 
    <value>5</value> 
    <isDefaultValue>false</isDefaultValue> 
</CascadingDropDownNameValue> 
</ArrayOfCascadingDropDownNameValue> 

我可以看到,我產生了必要的陣列,但由於某些原因,該數組不會出現在我的下拉列表中,我不知道爲什麼。看起來好像我已經涵蓋了教程中的所有內容,但是我似乎無法使其發揮作用。下面顯示的是我的.aspx文件。

<%@ Page Title="LockoutNew" Language="VB" MasterPageFile="~/Site.Master" AutoEventWireup="true" CodeBehind="LockoutNew.aspx.vb" Inherits="Lockout.LockoutNew" %> 

<%@ Register assembly="AjaxControlToolkit" namespace="AjaxControlToolkit" tagprefix="ajaxToolkit" %> 

<asp:Content runat="server" ID="BodyContent" ContentPlaceHolderID="MainContent"> 

<div> 
    Complex: <asp:DropDownList ID="ComplexList" runat="server" /><br /> 
    <!-- Machine: <asp:DropDownList ID="MachineList" runat="server" /><br /> --> 
</div> 

<ajaxToolkit:CascadingDropDown ID="ccd1" runat="server" 
    ServicePath="lockoutService.asmx" ServiceMethod="GetComplex" 
    TargetControlID="ComplexList" Category="Complex" 
    PromptText="Select Complex" /> 

<!-- <ajaxToolkit:CascadingDropDown ID="ccd2" runat="server" 
    ServicePath="lockoutService.asmx.vb" ServiceMethod="GetMachine" 
    TargetControlID="MachineList" ParentControlID="ComplexList" 
    Category="Machine" 
    PromptText="Select Machine" /> --> 

</asp:Content> 

任何幫助是極大的讚賞...

+0

有時候,我看到其他人在一個WebService,而不是僅僅代碼隱藏託管時有問題。如果將方法移動到VB代碼隱藏中,會發生什麼情況?請相應更新您的「ServicePath」? –

+0

而且你看起來像你可能會遺漏函數聲明頂部的''屬性。 –

+0

我需要做一些關於代碼隱藏的研究,然後才能回覆你(VB新手在這裏)。 ScriptService屬性位於Site.Master中,所以我認爲上面發佈的網頁也會收到該屬性? – kubiej21

回答

0

我有完全相同的問題。 事情是,當建立級聯邏輯時,你需要知道第一個元素與其他元素不同。 鏈元素中的第一個沒有任何參數傳遞給方法! 因此,你的第一個下拉列表方法不能包含參數:

Public Function GetComplex() As CascadingDropDownNameValue() 
    Dim conn As New MySqlConnection("Server=localhost; database=lockout; User ID=root; Pwd=123let?") 
    conn.Open() 
    Dim comm As New MySqlCommand("SELECT complex_id, complex_name FROM complex ORDER BY complex_name", conn) 
    Dim dr As MySqlDataReader = comm.ExecuteReader() 
    Dim l As New List(Of CascadingDropDownNameValue) 

    While (dr.Read()) 
     l.Add(New CascadingDropDownNameValue(dr("complex_name").ToString(), dr("complex_id").ToString())) 
    End While 

    conn.Close() 
    Return l.ToArray() 
End Function