2013-07-10 3 views
0

Я следую учебнику here, чтобы попытаться реализовать каскадные выпадающие списки с помощью инструментария AJAX в VS2012, однако вместо этого я использую MySQL как мою базу данных. Я создал веб-сервис (как учебник описывает - показано ниже),AJAX каскадирование dropdownlist не заполняется

<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