asp.net - AJAX 级联下拉列表未填充

标签 asp.net mysql vb.net ajaxcontroltoolkit

我正在关注教程 here尝试在 VS2012 中使用 AJAX 工具包实现级联下拉列表,但是,我使用 MySQL 作为数据库。我创建了一个网络服务(如教程所述 - 如下所示),

<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>

非常感谢任何帮助...

最佳答案

我也遇到了同样的问题。 问题是,在构建级联逻辑时,您需要知道第一个元素与其余元素不同。 链中的第一个元素没有任何参数传递给该方法! 因此,第一个下拉列表的方法必须不包含任何参数:

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

关于asp.net - AJAX 级联下拉列表未填充,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17579726/

相关文章:

vb.net - 在“If/End If”之间跳转的键盘快捷键

vb.net - "Conversion from string ""to type ' 双 ' is not valid"

c# - 在 asp.net 中以不同用户身份登录?

mysql - Laravel 查询以获得至少包含一个数组元素的结果?

mysql - 将数据添加到 SQL 时,Sphinx 是否会自动更新索引?

mysql - 从 max(column) 重置自动增量

html - 使用 HTML Table 而不是 Gridview

c# - 页面类提供了哪些响应方法?

c# - 无法创建互斥量。网络

c# - .NET : Redirect from domain and subfolder to new domain, 保留路径和查询字符串,在 web.config 中使用 httpredirect