代码之家  ›  专栏  ›  技术社区  ›  Ben

jQueryUI用.NETMVC自动完成:如何在选中时显示标签但保存值

  •  5
  • Ben  · 技术社区  · 14 年前

    我已经实现了自动完成,并且在选择项目后,文本框中的标签和值出现了问题。键入邮政编码时,我会在下拉列表中看到标签:

    但在我选择一个后,将显示值(需要保存到数据库的ID),而不是文本框中显示的标签:

    以下是我的控制器方法:

    public JsonResult FindZipCode(string term)
        {
            VetClinicDataContext db = new VetClinicDataContext();
    
            var zipCodes = from c in db.ZipCodes
                           where c.ZipCodeNum.ToString().StartsWith(term)
                           select new { value = c.ZipCodeID, label = c.ZipCodeNum};
    
            return this.Json(zipCodes, JsonRequestBehavior.AllowGet);
        }
    

    <script type="text/javascript">
        $(document).ready(function() {
            $("#ZipCodeID").autocomplete({
                      source: '<%= Url.Action("FindZipCode", "Customers") %>',
            });
        });
    </script>
    
    <div class="ui-widget"><input type="text" name="ZipCodeID" id="ZipCodeID" /></div>
    

    编辑:这是我最后的工作代码:

    控制器:

    {
    VetClinicDataContext db=新建VetClinicDataContext();
    
    其中c。ZipCodeNum.ToString公司().StartsWith(术语)
    选择new{value=c.ZipCodeID,label=c.ZipCodeNum};
    
    返回这个.Json(邮政编码,JsonRequestBehavior.AllowGet文件);
    }
    

    <script type="text/javascript">
        $(document).ready(function() {
            $("#ddZipCode").autocomplete({
                source: '<%= Url.Action("FindZipCode", "Customers") %>',
                select: function(event, ui) {
                    var zipCodeID = parseInt(ui.item.value, 1);
                    $("#ddZipCode").val(ui.item.label);
                    $("#ZipCodeID").val(ui.item.value);
                    return false;
                }
            });
        });
    </script>
    
    <div class="ui-widget"><input type="text" name="ddZipCode" id="ddZipCode" /></div>
    <%= Html.Hidden("ZipCodeID")%>
    
    2 回复  |  直到 8 年前
        1
  •  6
  •   Luke Schafer    14 年前

    除了更改您的型号,不使用不同的邮政编码ID。。。

    为zipcode id创建一个隐藏字段。更改select行为,用id填充隐藏字段,用标签填充可见字段。

    The sample 如何做到这一点

    你考虑过如果他们自己打进去会怎么样吗?

        2
  •  4
  •   sca_tone    13 年前

    如果添加以下行,它将显示标签而不是id(我本以为应该是默认值,但是嘿)。

    select: function (event, ui) {
         event.preventDefault();
         event.target.innerText = ui.item.label;
    }