首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在vb.net中使用MySql自动完成文本框

在vb.net中使用MySql自动完成文本框
EN

Stack Overflow用户
提问于 2016-02-25 06:56:47
回答 2查看 1.5K关注 0票数 1

我试图使自动完成功能,这开始建议从数据表时,用户键入。看上去不错,但没找到。在我的数据库中,所有列、名称和连接似乎都是正常的。我不明白问题在哪里,因为它甚至没有抛出任何错误。这是我上传到服务器上的文件的链接。

ASPX

代码语言:javascript
运行
复制
<link href="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.1/themes/base/jquery-ui.css" rel="stylesheet" type="text/css"/>
    <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>
    <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.1/jquery-ui.min.js"></script> 
    <link href="jquery-ui.css" rel="stylesheet" type="text/css" />  
    <script src="http://ajax.aspnetcdn.com/ajax/jquery/jquery-1.8.0.js"></script>
    <script src="http://ajax.aspnetcdn.com/ajax/jquery.ui/1.8.22/jquery-ui.js"></script>


    <script type="text/javascript">  
        $(function () {
            $("#area").autocomplete({
                source: function (request, response) {
                    var param = { cityname: $('#area').val() };
                    $.ajax({
                        url: "Dafault.aspx/GetAreas",
                        data: JSON.stringify(param),
                        dataType: "json",
                        type: "POST",
                        contentType: "application/json; charset=utf-8",
                        dataFilter: function (data) { return data; },
                        success: function (data) {
                            response($.map(data.d, function (item) {
                                return {
                                    value: item
                                }
                            }))
                        },
                        error: function (XMLHttpRequest, textStatus, errorThrown) {
                            alert(errorThrown);
                        }
                    });
                },
                minLength: 2//minLength as 2, it means when ever user enter 2 character in TextBox the AutoComplete method will fire and get its source data. 
            });
        });

    </script>  

</head>
<body>
    <form id="form1" runat="server">
        <asp:ScriptManager ID="ScriptManager1" runat="server"></asp:ScriptManager>

    <div class="form-items">
        Select Area<br />
        <asp:TextBox ID="area" CssClass="area" runat="server"></asp:TextBox>

    </div>

VB

代码语言:javascript
运行
复制
Imports System.Data
Imports MySql.Data.MySqlClient
Imports System.Configuration
Imports System.Web.Services
Partial Class _Default
    Inherits System.Web.UI.Page
    <WebMethod>
    Public Shared Function GetAreas(areaname As String) As List(Of String)
        Dim area As New List(Of String)()
        Dim con As New MySqlConnection("Data Source=182.50.133.88;port=3306;Initial Catalog=db;User Id=user;password=pwd;")



        Dim query As String = String.Format("SELECT areaName FROM areas", areaname)
        'Note: you can configure Connection string in web.config also.
        Dim cmd As New MySqlCommand(query, con)
        con.Open()
        Dim reader As MySqlDataReader = cmd.ExecuteReader()
        While reader.Read()
            area.Add(reader.GetString(0))
        End While
        Return area
    End Function
End Class
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-03-01 05:50:28

您的WebMethod期望parameter具有与您从ajax传递的名称相同的名称。

像这样在param中修改javascript

代码语言:javascript
运行
复制
var param = { areaname : $('#area').val() };

另外,您使用的是asp:Textbox,它可能会更改其id,然后jquery将找不到它。

所以您可以使用ClientIDMode=static,这样文本框的id就不会被更改。

代码语言:javascript
运行
复制
<asp:TextBox ID="area" CssClass="area" runat="server" ClientIDMode="Static"></asp:TextBox>

更新

您的查询没有where子句,因此您将从数据库中获取所有记录。添加一个where子句并将areaname作为parameter传递给查询。

代码语言:javascript
运行
复制
Dim query As String = String.Format("SELECT areaName FROM areas Where UPPER(areaName) like @areaName", areaname);
Dim cmd As New MySqlCommand(query, con)
cmd.Parameters.Add("@areaName",areaname.ToUpper()+"%");

更新2

您还可以检查区域名称是否以您传递的字母开头,然后添加到列表,否则不要添加列表。

代码语言:javascript
运行
复制
if(reader.GetString(0).StartsWith(areaname))
area.Add(reader.GetString(0))

我不知道VB的确切语法,但我希望你能理解。

票数 1
EN

Stack Overflow用户

发布于 2016-03-01 18:36:51

如果您只有一个字母需要与建议相匹配,您可以尝试如下:

代码语言:javascript
运行
复制
    While reader.Read()
        Dim str As String=reader.GetString(0)
        If str(0)= areaname then area.Add(str)
    End While
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35620406

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档