首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在选择JQuery自动完成项时使用SQL数据填充字段。

在选择JQuery自动完成项时使用SQL数据填充字段。
EN

Stack Overflow用户
提问于 2016-08-25 03:54:50
回答 1查看 786关注 0票数 1

我有一个包含姓氏、名字和电子邮件的输入表单。我不想在文本框中输入并单击submit在DB-2中创建记录,而是希望使用jQuery autocomplete搜索另一个现有数据库DB-1,并从那里的一个表中提取用户信息。因此,当我单击autocomplete选项时,它应该用它们的信息填充三个文本框,这样当我单击submit时,它将在DB-2中创建一个与DB-1中的数据一致的记录。

目前,我有为DB-2工作的输入字段和提交按钮。我可以手动键入姓氏、名字和电子邮件,当我单击提交时,记录将添加到DB-2中。我还具有自动完成功能,这样我就可以在DB-1中扫描一个表并选择一条记录。但是,我不确定如何填充这些输入字段。我想一定是像这样的jQuery autocomplete documentation example。然而,不仅仅需要我选择的内容,我还需要与该选择相关联的其他几列。这是我现在拥有的代码。

代码语言:javascript
复制
<form method="post">      
        @Html.TextBox("lastName", Request.Form["lastName"], new { maxlength = 50 })
        @Html.TextBox("firstName", Request.Form["firstName"], new { maxlength = 50 })
        @Html.TextBox("email", Request.Form["email"], new { maxlength = 50 })
        <p><input type="submit" name="btnSubmit" value="Assign Reader" /></p>
</form>

下面是我的小部件代码:

代码语言:javascript
复制
<div class="ui-widget">
        <input id="fullname" name="fullname" placeholder="Search by Name" size="50">
</div>

   List<string> LastNames = new List<string>();
    foreach (var item in db1.Query("SELECT * FROM myTableInDB1; "))
    {
        var LName = item.LastName;
        var FName = item.FirstName;
        var eMail= item.email;           
        var FullName = LName + ", " + FName;
        FullNames.Add(FullName);
    }    
<script>
    $(function () {
        function log( message ) {

<<note: this is where the jQuery example has the selection posted 
 to a log. I can do that but just with the FullName data. I'm not 
 sure what happens to the other data in the above foreach.>>

        }
        var FullNames = @Html.Raw(Newtonsoft.Json.JsonConvert
                      .SerializeObject(FullNames.ToArray()));
        $("#fullname").autocomplete({
            source: FullNames,

<<note: I also added this bit in to test that my selection 
 was getting posted to the log window>>

            select: function( event, ui ) {
            log( ui.item ?
              ui.item.value : this.value );
        }
        });
    });
</script>

那么,我如何使用自动完成功能来搜索出我需要的记录,一旦选中它,当我只将(FullName)放入自动完成数组时,它将收集LName、FName和eMail的所有这些变量值。

我是否需要使用选择来执行db-1的另一个查询,然后将这些返回添加到文本框中?如果我有来自自动完成的选择的id,我可以这样做,但我不知道如何获得它。

如果有一种方法可以在foreach过程中引入这些值,那就更好了。

我准备好只复制一些在网格视图中返回查询结果的代码,然后我就可以使用网格视图选择来填充文本字段。但是,如果这个自动完成功能能够以某种方式连接起来,它在页面上看起来会更整洁。提前感谢你对这一点的建议。--时间

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-08-25 05:14:43

目前,您的自动补全源是一个名称数组。但您希望填充所选选项的FirstName、LastName和电子邮件。因此,首先,我们需要将源数据从一个简单的名称数组更改为一个对象数组,其中每个对象都将具有FirstName、LastName和Email属性。

代码语言:javascript
复制
@{
   var db=new MyDb();
   var userList = db.Users.SqlQuery("SELECT * from Users")
                          .Select(f => new { FirstName = f.FirstName, 
                                             LastName = f.LastName, 
                                             Email = f.Email,  
                                             value = f.FirstName+" "+ f.LastName}).ToList();

}

假设您的Users表包含FirstNameLastNameEmail字段。

现在使用这个对象数组作为源,在select事件中,获取所选的项(对象),读取FirstNameLastNameEmail属性值并设置为输入字段。

代码语言:javascript
复制
@section scripts
{
    <script>

        $(function () {
           var userArray = @Html.Raw(Newtonsoft.Json.JsonConvert.SerializeObject(userList));

           $("#fullname").autocomplete({
                source: userArray,
                select: function( event, ui ) {                       
                    $("#firstName").val(ui.item.FirstName);
                    $("#lastName").val(ui.item.LastName);
                    $("#email").val(ui.item.Email);
                }
           });
        });

    </script>
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39132000

复制
相关文章

相似问题

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