自动完成jquery和SQL,ASP.NET

2024-02-23

我正在尝试使用 jquery 创建一个自动完成文本框,它将绑定到 SQL 数据库。我还想在页面上放置一个下拉列表,以便根据初始选择自动完成文本框将从不同的表中检索数据。这是一个 ASP.NET 2.0 页面,背后的代码是 VB.NET。我有 AJAX 自动完成功能,但它只匹配第一个字符,而且不像 jquery 那样强大。谁能分享一个示例代码,该代码将从 SQL 检索搜索数据,并指导我如何使表名动态化?

任何帮助是极大的赞赏

Mart


您可以编写一个处理程序 (.ashx) 以从数据库返回文本搜索和表名称的查询结果。对于表名,请查看 SQL Server 中的 INFORMATION_SCHEMA.TABLES ...

看看这个.NET AJAX 调用 ASMX、ASPX 或 ASSX? https://stackoverflow.com/questions/673075/net-ajax-calls-to-asmx-or-aspx-or-ashx对于使用 ScriptService 的稍微现代的方法 - 基本思想是相同的。

如果需要的话,我明天会发布代码(其 v.late),

Hth.

EDIT:

最简单的(您会意识到做一些更复杂的事情所涉及的问题)让我们假设您有三个表:User, 部门 and Product.

表:用户
ID 整数
名字 varchar(50)
姓氏 varchar(50)
出生日期日期时间

表:部门
Id int
名称 varchar

表:产品
Id int
名称 varchar

并且你需要3个Sprocs来按部分进行选择Name:

产品和部门的存储过程的形式相同:

CREATE PROCEDURE dbo.ProductSelect (dbo.DepartmentSelect)
    @qry VARCHAR(50)
AS
BEGIN
    SET NOCOUNT ON;

    SELECT *
FROM dbo.Product  (dbo.Department)
WHERE [Name] LIKE '%' + @qry + '%'
END

对于用户来说略有不同:

CREATE PROCEDURE [dbo].[UserSelect]
    @qryTerm VARCHAR(50)
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;

SELECT U.Id, U.Forename + ' ' + U.Surname AS [Name], U.DateOfBirth
FROM 
    dbo.[User] U
WHERE
    (
        forename LIKE '%' + @qryTerm + '%'
        OR
        surname LIKE '%' + @qryTerm + '%'
    )
ORDER BY 
    surname, Forename
END

基本页面/控件标记:

<div>
    Tables:
    <asp:DropDownList runat="server" ID="ddlTables" />

</div>

<div>
    <asp:TextBox runat="server" ID="txtUser" />
</div>
....

要将下拉列表绑定到表列表,您需要一个存储过程/查询,如下所示:

SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = 'dbo' ORDER BY TABLE_NAME [Change the schema name to that of your schema]

//Bind your dropdown to the list of tables
using (SqlConnection conn = new SqlConnection(ConfigurationManager.AppSettings["dbConnString"]))
    {
        using (SqlCommand cmnd = conn.CreateCommand())
        {
            cmnd.CommandType = CommandType.StoredProcedure;
            cmnd.CommandText = "dbo.TableSelect";

            conn.Open();

            System.Text.StringBuilder sb = new System.Text.StringBuilder();

            using (SqlDataReader rdr = cmnd.ExecuteReader(CommandBehavior.CloseConnection))
            {
                string _fullName;
                while (rdr.Read())
                {
                    _fullName = string.Format("{0}.{1}",rdr["Table_Schema"].ToString(), rdr["Table_Name"].ToString());
                    ddlTables.Items.Add(new ListItem(_fullName,_fullName));
                }
                ddlTables.Items.Insert(0, new ListItem("Select Table ..."));
            }
        }
    }

然后你需要将你的文本框连接到一个 JavaScript 函数来响应keyup event:

//Wire up the textbox
        txtUser.Attributes.Add("onkeyup", "doLookup();");

function doLookup(){

}

执行此操作的现代方法是使用 JQuery 的 AJaX 功能。基本上,您调用处理程序的 URL,该处理程序将返回查询结果,然后将其绑定或输出到 GUI 元素你的文本框,所以它看起来有点像一个下拉列表。然后,用户单击返回的条目之一将其复制到文本框。

一些处理程序代码:

    public void ProcessRequest(HttpContext context)
    {
        HttpRequest req = context.Request;
        if (string.IsNullOrEmpty(req.QueryString["qry"]) || string.IsNullOrEmpty(req.QueryString["tableName"])){
            return;//  You could return something meaningful if no sql query is passed
        }


        String sqlstr = req.QueryString["qry"];
        String tableName = req.QueryString["tableName"];

        System.Text.StringBuilder sb = new System.Text.StringBuilder();

        using (SqlConnection conn = new SqlConnection(ConfigurationManager.AppSettings["dbConnStr"])){
            using (SqlCommand cmnd = conn.CreateCommand())
            {
                cmnd.CommandText = tableName + "Select";
                cmnd.CommandType = CommandType.StoredProcedure;
                SqlParameter pram = new SqlParameter("@qry", sqlstr);
                pram.Direction = ParameterDirection.Input;
                cmnd.Parameters.Add(pram);

                pram = new SqlParameter("@tableName", tableName);
                pram.Direction = ParameterDirection.Input;
                cmnd.Parameters.Add(pram);

                conn.Open();

                using (SqlDataReader rdr = cmnd.ExecuteReader(CommandBehavior.CloseConnection)){
                    while (rdr.Read()){
                        sb.Append(rdr["Name"].ToString() + "<br/>"); //Modern object-oriented thing to do is build up a JSON string and return that.
                    }
                }

            }
        }

        context.Response.ContentType = "text/plain";//or "text/JSON"
        context.Response.Write(sb.ToString());
    }

祝你好运。如果您需要更多详细信息,请告诉我...

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

自动完成jquery和SQL,ASP.NET 的相关文章

随机推荐

  • MongoDB - PHP - MongoCursorException“找不到游标”

    我有 2 个集合 A 380 万个文档 和 B 170 万个文档 我有一个从 shell 运行的 PHP 脚本 循环遍历 A 中的每条记录 60 的时间 它在 B 上执行 findOne 使用 id 做一些基本的数学运算 创建一个 php
  • 如何在详细视图中跳转到下一行

    我有一个 TableView 它在 didSelectRow 中加载详细视图 我对数据没有任何问题 我正在使用 coreData 并使用 NSFetchedResultsController 来填充 TableView 现在 我想在详细视图
  • 将脚注添加到 gsummary 表中的单行标签

    我正在尝试向行标签添加脚注gtsummary https www danieldsjoberg com gtsummary 表 但我不知道如何引用我想要的确切单元格 预期输出 使用默认值trial数据集 我想在 药物 B 中添加一个脚注 内
  • Json 序列化将 k__BackingField 添加到我的属性中

    这种情况最近才开始发生在未更改的代码上 它是 nuget 包中的外部库 如果我这样做 var client HttpClient var response await client PostAsJsonAsync some url some
  • 启动进程并允许调用者结束而无需等待进程完成

    我需要从 C 控制台应用程序启动一个进程 然后允许控制台应用程序完成 结束 而无需等待进程 线程完成 我该怎么做呢 您需要避免使新进程成为当前进程的子进程 ProcessStartInfo sinfo new ProcessStartInf
  • 如果页面有 session_start(),则不会加载;在里面

    我最近从多年的 WAMP 切换到 XAMPP 因为我想要 PHP 7 但我注意到一些我以前从未经历过的事情 它不会加载具有以下内容的 php 文件 session start 在他们中 我只是在 Chrome IE FF 中收到 正在等待本
  • 来自 DataProvider 的 Yii 分页变量

    我的控制器操作中需要某些分页变量 such as 1 当前页码 2 当前页偏移量 3 显示总记录数 即显示 2005 年的 31 至 40 条记录 我尝试了以下方法 dataProvider NodesTerms getNodesDataF
  • Docker 按顺序下载各层

    有没有办法让 docker 按顺序而不是并行下载图像的各层 我之所以需要这个 是因为我们的存储库对网络问题非常严格 或狡猾 我收到很多 EOF 错误 例如 time 2016 06 14T13 15 52 936846635Z level
  • Web API 中的命名空间“System.Web”中不存在类型或命名空间“Http”

    我正在尝试按照此链接创建一个 Web API 我已经完全添加了它的显示方式this https www tutorialspoint com asp net mvc asp net mvc web api htm文章 但是添加控制器后 它给
  • 根据值向网格图添加边框

    我想知道你是否能帮我解决这个问题 我有一个由 0 和 1 组成的网格 如果它是 1 我想向绘图单元格区域添加边框颜色 我使用 imshow 生成根据值着色的网格 例如 a np random randint 2 size 10 10 im
  • Yarn 迷你集群容器日志目录不包含 syslog 文件

    我已经基于 CDH 5 1 0 的 hadoop 2 3 0 设置了带有 1 个节点管理器 4 个本地目录和 4 个日志目录等的 YARN MapReduce 迷你集群 它看起来或多或少起作用 我未能实现的是从容器进行系统日志记录 我看到容
  • 为什么 wget 输出到 stderr 而不是 stdout?

    经过 30 分钟徒劳尝试捕获输出后wget 我发现该程序写入stderr而不是stdout 在网络和堆栈溢出中搜索表明这是一个众所周知的事实 知道为什么会这样吗 这是众所周知的 因为它在manual http www gnu org sof
  • PHP 组合数组

    我如何组合这两个数组 如果数组有重复项 则只有一个使用 PHP 表示 Array 0 gt 18 1 gt 20 2 gt 28 3 gt 29 Array 0 gt 1 1 gt 8 2 gt 19 3 gt 22 4 gt 25 5 g
  • 如何对不描述函数的 N 个点进行插值

    Suppose i have n points also suppose that this points have an order and not necessary this points make a function I m wo
  • JavaFX ContextMenu 加速器从错误的选项卡触发

    我有一个TabPane有两个选项卡 每个选项卡都有一个TableView它有一个上下文菜单 这两个上下文菜单有重复的加速器 但我希望只有当前选定的选项卡才会响应 但发生的只是最后添加的Tab似乎得到了该事件 即使它没有被选择 下面是完整的示
  • 从子文件夹提供 React 应用程序时出错

    我正在尝试从子文件夹提供 React 应用程序 目前它是一个非常简单的 SPA 运行在根 URL 上 例如http 我的服务器 3000 http myserver 3000 并且我想从子文件夹中提供它 例如http myserver 30
  • 在仅包含值类型的自定义结构上使用 Marshal.SizeOf() 方法

    我创建了一个由两种值类型组成的简单结构 public struct Identifier public Guid ID get set public Byte RequestType get set 然后我打电话Marshal SizeOf
  • Django 中的 URL 正则表达式,具有有限的单词集

    给定以下 django URL conf 入口 url r P
  • 查找 2D 数组/矩阵中 k 个最高值的索引

    我有一个包含值的 2D 矩阵 我想找到前 5 个值的索引 例如对于 matrix 0 17542851 0 13199346 0 01579704 0 01429822 0 01302919 0 13279703 0 12444886 0
  • 自动完成jquery和SQL,ASP.NET

    我正在尝试使用 jquery 创建一个自动完成文本框 它将绑定到 SQL 数据库 我还想在页面上放置一个下拉列表 以便根据初始选择自动完成文本框将从不同的表中检索数据 这是一个 ASP NET 2 0 页面 背后的代码是 VB NET 我有