我已经实现了自动填充,并且在选择项目后,我在文本框中遇到标签与值的问题。当我输入邮政编码时,我会在下拉列表中看到标签:
但是在我选择一个,而不是文本框中显示的标签后,显示的值(即需要保存到数据库的ID):
如何在选择标签后仍然显示标签,但是当保存表单时,它会传递字段的ZipCodeID?
这是我的Controller方法:
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>
编辑:这是我的最终工作代码:
控制器:
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() {
$("#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")%>
答案 0 :(得分:6)
没有将您的模型更改为不使用不同的邮政编码ID ...
为zipcode ID创建隐藏字段。更改选择行为以使用ID填充隐藏字段,使用标签填充可见字段。
有关如何实现此目的,请参阅The sample
您是否考虑过如果他们自己输入会发生什么?
答案 1 :(得分:4)
如果添加以下行,它将显示标签而不是id(我认为应该是默认值,但是嘿)。
select: function (event, ui) {
event.preventDefault();
event.target.innerText = ui.item.label;
}